Пакетное копирование и перемещение файлов без перезаписи

Пакетное копирование и перемещение файлов без перезаписи

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

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

copy %1 dest
move %1 dest

решение1

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

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

эхо N | перемещение /-Y файл1 файл2

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

решение2

Мне не совсем понятно, что вы имеете в виду, говоря о перемещении только что скопированного файла, но для проверки существования файла используйте оператор «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 соответствует каталогу и пути 1-го параметра
  • %~dp2 соответствует каталогу и пути 2-го параметра
  • %~nx1 соответствует имени файла и расширению первого параметра
  • /XN Исключает новые файлы во время копирования
  • /XO Исключает старые файлы во время копирования
  • /MOV Перемещает файл вместо простого копирования.
  • добавляет выходные результаты в файл вместо окна cmd (используйте только один >, если вы хотите каждый раз перезаписывать журнал)

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

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

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

Связанный контент