我从系统中得到了一个文本文件--在这个文件中有文件名(每行一个文件名)--现在有了一个批处理文件--这个列表中的每一行(文件名)都应该在一个目录中进行搜索,并复制到另一个目录中。
我找到了这个,它几乎是有效的:
@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;
....ANd现在我必须编辑搜索词,并为其添加一个特定的词-原始:
filename1;但应该搜索它:
filename1_DE因此,从列表中的搜索词中,应该去掉最后一个字符";“,并添加词"_DE”。不应该只更改列表中的搜索词。
这有可能吗?
非常感谢!
发布于 2019-05-11 18:18:50
感谢您的回答-我将我的版本更改为以下版本,它适用于我:)
@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发布于 2019-05-11 17:51:00
for /?解释了变量的扩展,但简而言之,一个文件可以被分成几个部分,扩展到元变量上。举个例子,如果我们有一个文件的字符串:
D:\work\file1.txt我们可以运行一个for循环来获取上面的字符串或字符串的一部分:
for %%i in (c:\work\file1.txt) do echo %%i将与D:\work\file1.txt呼应
但是我们现在可以使用诸如drive,path,name,extension等东西来扩展%%i。所以下面是一个简单的例子,你可以按原样复制它并保存为批处理文件,然后自己测试它:
@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%%~xihttps://stackoverflow.com/questions/56075031
复制相似问题