Попытка написать файл Bat для копирования файлов на основе имен в списке - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь написать скрипт для получения всех имен файлов в папке без расширения. И затем из этого текстового файла со всеми именами я хочу скопировать каждый файл с таким именем в папку в любом месте. Таким образом, в папке B будут все нужные мне файлы с .pdf, и я хочу получить файл .doc из папки A с соответствующим именем как B

Пример Папка B = 123.doc.pdf, 234.doc.pdf, 345.doc.pdf

Папка A = 123.doc, 234.doc, 345.doc, 1324.doc, 54353.doc, 1231.doc

Я хочу получить имена из B без .pdf, а затем использовать этот текстовый файл для копирования файлов документов из папки A в новую папку C.

Я создал скрипт для получения всех имен файлов, но не уверен, как удалить расширение и сохранить его в файле.

dir /a /b /-p /o:gen >FileNames.txt

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 28 апреля 2018

Вот простой пакетный файл для этой задачи:

@echo off
md "C:\Temp\Folder C" 2>nul
for %%I in ("C:\Temp\Folder B\*.doc.pdf") do if exist "C:\Temp\Folder A\%%~nI" copy /Y "C:\Temp\Folder A\%%~nI" "C:\Temp\Folder C\" >nul
rd "C:\Temp\Folder C" 2>nul

Вторая командная строка создает Folder C с подавлением любого сообщения об ошибке, например, что один выход в этой папке уже записан для обработки STDERR путем перенаправления его на устройство NUL .

Третья командная строка использует команду FOR для поиска любого не скрытого файла в Folder B с именем файла, совпадающим с шаблоном подстановки *.doc.pdf.

Для каждого найденного файла в Folder B выполняется условие IF , чтобы проверить, существует ли файл с тем же именем без расширения .pdf в Folder A. Если это условие истинно, файл копируется в Folder C с перезаписью существующего файла в Folder C с тем же именем, за исключением того, что установлен атрибут только для чтения, и с подавлением сообщения об успехе, записанного для обработки STDOUT перенаправив его на устройство NUL .

Последнее Folder C удаляется, но только если оно пустое. Вывод сообщения об ошибке для обработки STDERR на Folder C, содержащей файл, подавляется путем перенаправления его на устройство NUL .

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

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