我一直在这个论坛上阅读很棒的帖子,接近我想做的事情,但无法弄清楚确切的代码。
我想创建一个Windows批处理文件来执行以下操作:
感谢。
答案 0 :(得分:1)
我目前没有运行Windows,因此我只能发布一些想法,而不是解决方案。
1)使用for /f
迭代文件内容。
2)使用find "%Keyword%" %SourceDir%
获取匹配文件列表。您必须从find
的输出中解析出文件名。
2a)作为替代方案,您可以迭代源目录中的文件(使用嵌套for
)并为每个文件调用find
,丢弃其输出并使用其退出代码({{1确定文件是否匹配(如果匹配则返回0,如果没有匹配则返回非零)。像这样:
%ERRORLEVEL%
3)使用for %%F in (%SourceDir%\*) do (
find "%Keyword%" %%F > nul
if not errorlevel 1 (echo File %%F matches) else (echo File %%F does not match)
)
移动匹配文件。
答案 1 :(得分:0)
我写了以下代码但不确定我是否在正确的轨道上。这是我的设置: list.txt文件内容是(我的文件名搜索关键字) -
one
two
five
ten
six
f1文件夹包含 -
four.txt
one.txt
three.txt
我想将匹配的文件移动到F2文件夹,但代码简单性我改为使用echo。
我的代码是:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET listfile=D:\batchtest\list.txt
SET searchdir=D:\batchtest\f1
FOR /F "tokens=*" %%A IN (%listfile%) DO (
FOR %%f in (%searchdir%\*) do (FIND /i "%A%" %%f
if errorlevel 1 (
echo Search failed) else (
echo Search successful
)
)
)
)
它正在运行,但找不到匹配的文件名。
感谢。
答案 2 :(得分:0)
存在多个问题。
FIND / i“%A%”...无效,FOR-Varibale的名称为%% A
第二个问题:使用FIND,您检查文件的内容而不是名称。
你应该使用缩进来避免过多的括号。
你最好试试
FOR /F "tokens=*" %%A IN (%listfile%) DO (
FOR %%f in (%searchdir%\*) do (
set "filename=%%~f"
set replaced=!filename:%%A=!
if !replaced! NEQ !filename! (
echo !filename! contains '%%A'
)
)
)
尝试将文件名内的%% A替换为。 如果被替换的文件名不相同,则文件名必须包含%% A