![Пакетное копирование и перемещение файлов без перезаписи](https://rvso.com/image/1400013/%D0%9F%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D0%BE%D0%B5%20%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B8%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8.png)
Я пытаюсь создать пакетный файл (для работы в фоновом режиме), который будет копировать один файл, не перезаписывая ни одного файла в месте назначения с таким же именем, а затем переместить файл, опять же не перезаписывая, если в месте назначения есть файл с таким же именем?
Я сейчас этим пользуюсь, но он перезаписывает.
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