Переместите файл в несколько файлов, но только если он еще не существует в определенной папке - PullRequest
0 голосов
/ 04 августа 2020

У меня есть этот командный файл для запуска каждый день, который копирует несколько копий файла в определенное место, а затем перемещает исходный файл в архив. Полное исходное имя файла меняется каждый день с непоследовательными числами в середине, поэтому маска используется с подстановочным знаком (*). Исходный файл затем архивируется в месте архива.

copy "\\source-location\source_file*.txt "\\new-location\source_file1.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt "\\new-location\source_file2.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt "\\new-location\source_file3.txt" >> c:\logs\log.txt 2>&1
move "c:\source location\source_file*.txt "\\new-location\archive\" >> c:\logs\log.txt 2>&1

Проблема, с которой я столкнулся, заключается в том, что у меня нет контроля над расположением источника. Файлы предыдущего дня должны быть удалены из исходного местоположения администраторами этого местоположения, но иногда это не делается. Поскольку я использую подстановочный знак (*), это означает, что иногда два файла объединяются вместе при выполнении команд копирования, в результате чего добавляются дублированные данные с предыдущего дня.

Мне нужен сценарий, чтобы сначала проверить, есть ли какие-либо файлы в исходном местоположении уже существуют в каталоге new-location \ archive. В таком случае игнорируйте их и копируйте только все оставшиеся файлы.

Любая помощь очень ценится

1 Ответ

0 голосов
/ 04 августа 2020

Все шаблоны исходного файла отсутствуют " после .txt. Таким образом, опубликованный код с этим исправлением будет:

copy "\\source-location\source_file*.txt" "\\new-location\source_file1.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt" "\\new-location\source_file2.txt" >> c:\logs\log.txt 2>&1
copy "\\source-location\source_file*.txt" "\\new-location\source_file3.txt" >> c:\logs\log.txt 2>&1
move "\\source location\source_file*.txt" "\\new-location\archive\" >> c:\logs\log.txt 2>&1

Но одно решение будет использовать FOR l oop с условием IF :

(for %%I in ("\\source-location\source_file*.txt") do if not exist "\\new-location\archive\%%~nxI" (
    copy "%%I" "\\new-location\source_file1.txt"
    copy "%%I" "\\new-location\source_file2.txt"
    copy "%%I" "\\new-location\source_file3.txt"
    move "%%I" "\\new-location\archive\"
)) >>c:\logs\log.txt 2>&1

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки , выполните в нем следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • copy /?
  • for /?
  • if /?
  • move /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...