2

Я пытаюсь создать пакетный файл (для запуска в фоновом режиме), который будет копировать один файл без перезаписи любого файла в месте назначения с тем же именем, а затем перемещать файл, снова не перезаписывая, если в пункт назначения с тем же именем?

Я использую это в данный момент, но это перезаписывает.

copy %1 dest
move %1 dest

2 ответа2

2

Пожалуйста, попробуйте это. Это работает для одного файла.

эхо N | копировать /-Y файл1 файл2

эхо N | переместить /-Y файл1 файл2

Интересно, что это похоже на работу с подстановочными знаками. Я проверял это на x64 Windows 7.

1

Мне неясно, что вы имеете в виду, перемещая тот же файл, который был только что скопирован, но чтобы проверить, существует ли файл, используйте оператор "IF" в пакетном скрипте, как показано ниже. (Я объясню более подробно о% ~ дальше вниз.)

IF EXIST %~dp2%~nx1 (echo file exists) ELSE (
robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV>>testing.txt)

Следующее будет работать в Windows 7, Windows 8, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012.

(Для XP вы должны получить его из Resource Kit, но не более 30 дней жизни осталось на этом драгоценном камне :))

Следующий код копирует файл из исходного каталога в целевой каталог, только если конечный файл не существует.

robocopy source_path dest_path filename /XN /XO

И добавление /MOV переместит файл.

Если вы хотите использовать параметры, команда будет выглядеть примерно так:

copyscript.bat C:\Dir1\filename.ext D:\path2\

С copyscript.bat ищет что-то такое:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO

Если вы хотите отправить вывод в журнал, добавьте >> logfile.txt следующим образом:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO>>logfile.txt 

Если вы хотите переместить файл вместо копирования, то вот так:

robocopy %~dp1 %~dp2 %~nx1 /XN /XO /MOV 
  • % ~ dp1 соответствует каталогу и пути первого параметра
  • % ~ dp2 соответствует каталогу и пути второго параметра
  • % ~ nx1 соответствует имени файла и расширению 1-го параметра
  • /XN исключает новые файлы во время копирования
  • /XO исключает старые файлы во время копирования
  • /MOV MOVES файл вместо простого копирования
  • добавляет результаты вывода в файл вместо окна cmd (используйте только один>, если вы хотите каждый раз перезаписывать журнал)

  • по умолчанию robocopy не перезаписывает файл, если отметки даты и времени совпадают.

Сайт Саймона Шеппарда является хорошим ресурсом для пакетных скриптов, синтаксис для аргументов здесь. http://ss64.com/nt/syntax-args.html

Информация о робокопии Microsoft находится здесь http://technet.microsoft.com/en-us/library/cc733145.aspx

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .