Проблемы с копированием файлов из списка через командный файл - PullRequest
0 голосов
/ 10 мая 2019

Я получаю текстовый файл из системы - в этом файле есть имена файлов (в каждой строке одно имя файла) - теперь с пакетным файлом каждую строку (имя файла) из этого списка следует искать в каталоге и копировать вother direcory.

Я нашел это, и он почти работает:

@echo off &setlocal
set "sourceRoot=C:\Users\test\Desktop\COPY_TEST\originale"
set "sourceList=C:\Users\test\Desktop\COPY_TEST\DBLIST.TXT"
set "destFolder=C:\Users\test\Desktop\COPY_TEST\kopiert"

for /f "delim=" %%i in ('dir /a-d /b /s "%sourceRoot%\*.pdf"^|findstr /ig:"%sourceList%"') do (
  copy "%%~i" "%destFolder%\"
)
ECHO "Ausgabe abgeschlossen"
PAUSE

Это работает, если список выглядит следующим образом:

filename1
filename2
....

НО из другой системыя получаю такой список:

filename1;
filename2;
....

И теперь мне нужно отредактировать поисковый термин и добавить к ним определенный термин - оригинал:

filename1;

Но его нужно искать:

filename1_DE

Значит из поисковой строки в списке последний символ ";"следует сократить и добавить термин "_DE".Не в списке следует менять только поисковый запрос.

Возможно ли это?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Спасибо за ваш ответ - я изменил свою версию на следующую, и она работает для меня:)

@echo off &setlocal
set "sourceRoot=C:\Users\offic\Desktop\COPY_TEST\originale"
set "sourceList=C:\Users\offic\Desktop\COPY_TEST\DBLIST.TXT"
set "destFolder=C:\Users\offic\Desktop\COPY_TEST\kopiert"
set "sprache=_EN"

FOR /f "tokens=1 delims=;" %%i IN ('FINDSTR . "%sourceList%"') DO (
    copy "%sourceRoot%\%%~i%sprache%.pdf" "%destFolder%\"
)

ECHO "Ausgabe abgeschlossen"
PAUSE
0 голосов
/ 11 мая 2019

for /? объясняет расширение переменных, но вкратце файл может быть разбит на части, расширяющие метавариабельные переменные. Например, если у нас есть строка файла:

D:\work\file1.txt

мы можем запустить цикл for, чтобы получить вышеуказанную строку или ее части:

for %%i in (c:\work\file1.txt) do echo %%i

будет повторяться D:\work\file1.txt

, но теперь мы можем расширить на %%i, используя такие вещи, как d rive, p ath, n ame, e xtension и т. Д. Так что прямой пример будет ниже, вы можете скопировать это как есть и сохранить как командный файл и проверить его для себя:

@echo off
for %%i in ("c:\work\file1.txt") do (
   echo Full string and retain double quotes: %%i
   echo Full string but remove double quotes: %%~i
   echo Drive only: %%~di
   echo Path only: %%~pi
   echo Filename only: %%~ni
   echo Extension only: %%~xi
   echo Combination of drive and path: %%~dpi
   echo Combination name and extension: %%~nxi
   echo adding text between name %%~ni and extension %%~xi as: %%~niTEXT%%~xi
)

Итак, с учетом приведенного выше объяснения, вам просто нужно использовать только имя, добавить текст и присоединиться с расширением.

copy "%%~i" "%destFolder%\%%~ni_DE%%~xi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...