我从系统中获得一个文本文件-该文件中有文件名(每行一个文件名)-现在带有批处理文件,应在目录中搜索该列表中的每一行(文件名)并复制到其他可怕的事情。
我找到了这个,它几乎可以正常工作:
@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”。 不应仅搜索词来更改列表。
有可能吗?
非常感谢!
答案 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