Войти

Показать полную графическую версию : копирование папки или файла


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

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

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

Iska
22-06-2012, 16:36
vxor, а как Вы указываете параметр?

vxor
22-06-2012, 16:38
vxor, а как Вы указываете параметр? »
Что это значит? Как его надо указывать? Его передает Total Commander...

Anonymоus
22-06-2012, 17:00
@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
Прекрасно!!!! Можно краткий комментарий получить по работе скрипта? (8 часов не мог сделать это, а Вы за 3 минуты написали) Большое спасибо!!

Anonymоus
22-06-2012, 17:09
@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
Не работает, если путь файла\папки с пробелом.. Можно исправить это?

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

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

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




© OSzone.net 2001-2012