通过批处理文件从列表复制文件的问题

时间:2019-05-10 09:50:33

标签: batch-file

我从系统中获得一个文本文件-该文件中有文件名(每行一个文件名)-现在带有批处理文件,应在目录中搜索该列表中的每一行(文件名)并复制到其他可怕的事情。

我找到了这个,它几乎可以正常工作:

@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 :(得分:0)

for /?解释了变量的扩展,但是总而言之,文件可以分解为在元变量上扩展的部分。例如,如果我们有一个文件字符串:

D:\work\file1.txt

我们可以运行for循环以获取上述字符串或部分字符串:

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

将回显D:\work\file1.txt

但是我们现在可以使用%%i劈裂,d ath,p ame,e n张力等来扩展x。下面是一个正向示例,您可以按原样复制并另存为批处理文件并自己进行测试:

@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

答案 1 :(得分:0)

谢谢您的回答-我将我的版本更改为以下版本,并且对我有用:)

@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