Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   копирование папки или файла (http://forum.oszone.net/showthread.php?t=237146)

vxor 22-06-2012 16:11 1938846

копирование папки или файла
 
Требуется батник, который в зависимости от того что в параметре %1 (файл или папка) копирует файл или папку. Копия должна лежать рядом с оригиналом.
(передаем в параметре полный путь файла - делает копию файла. Передаем полный путь папки, делает копию папки. Пример:
D:\texts\файл.txt ---> D:\texts\файл.txt.копия
D:\texts\папка ---> D:\texts\папка.копия

Запросов "файл или папка" быть не должно.
Код:

copy %1 %1-копия
- работает. Но папки не копирует.

Iska 22-06-2012 16:36 1938872

vxor, а как Вы указываете параметр?

vxor 22-06-2012 16:38 1938874

Цитата:

Цитата Iska
vxor, а как Вы указываете параметр? »

Что это значит? Как его надо указывать? Его передает Total Commander...

Anonymоus 22-06-2012 17:00 1938898

Код:

@Echo Off
If "%~1"=="" Echo USAGE: %~nx0 ^<path^>&Exit /B 1
If Exist "%~1" (
        PushD "%~1" 2>nul&&(
                PopD
                Xcopy /E /I "%~1" "%~1.copy"
        )||(
                Copy "%~1" "%~1.copy"
        )
)


vxor 22-06-2012 17:03 1938902

Прекрасно!!!! Можно краткий комментарий получить по работе скрипта? (8 часов не мог сделать это, а Вы за 3 минуты написали) Большое спасибо!!

Anonymоus 22-06-2012 17:09 1938907

Код:

@Echo Off
:: Проверяем, передан ли параметр. Если не передан - выходим с errorlevel 1 и сообщением с примером использования
If "%1"=="" Echo USAGE: %~nx0 ^<path^>&Exit /B 1
:: Для начала проверяем существование файла\папки по пути из переданного параметра
If Exist "%~1" (
:: Пробуем сделать pushd, если сработает - то очевидно, что это папка. 2>nul гасит сообщение о ошибке, если это файл
        PushD "%~1" 2>nul&&(
:: Если вышло, используем popd для смены рабочего каталога обратно и копируем через xcopy, дописывая к имени папки .copy
                PopD
                Xcopy /E /I "%~1" "%~1.copy"
        )||(
:: Если pushd не прошел, копируем как обычный файл, точно так же добавляя .copy к имени
                Copy "%~1" "%~1.copy"
        )
)


vxor 22-06-2012 17:16 1938908

Не работает, если путь файла\папки с пробелом.. Можно исправить это?

Anonymоus 22-06-2012 17:22 1938910

vxor, отредактировал четвертый пост, исправил скрипт. Я там один символ пропустил, теперь с пробелами без проблем работать будет. Если будете использовать с путями, содержащими кириллицу, сохраните в кодировке 866.

vxor 22-06-2012 23:51 1939073

Не копируются системные и скрытые файлы. Добавил /H в строку с xcopy. Теперь копирует папки со скрытыми файлами. Отдельные же скрытые файлы не копирует. Что сделать? Какие еще могут быть подводные камни?

Если на CMD это не сделаешь, то можно на VBS, WSH.


Время: 22:56.

Время: 22:56.
© OSzone.net 2001-