Windows Batch file,根据文本文件的行项目执行循环搜索
我在这个论坛上读了很多很好的帖子,很接近我想做的事情,但是我想不出确切的代码 我要创建windows批处理文件以执行以下操作:Windows Batch file,根据文本文件的行项目执行循环搜索,windows,search,for-loop,batch-file,Windows,Search,For Loop,Batch File,我在这个论坛上读了很多很好的帖子,很接近我想做的事情,但是我想不出确切的代码 我要创建windows批处理文件以执行以下操作: 对文本文件的每一行项目(这是一个关键字列表)执行循环搜索,以查找特定目录中的文件 对于此搜索,部分匹配是可以的 每次找到文件时,将其移动到预定义目录(例如C:\temp\search\u results) 谢谢。我现在不运行Windows,所以我只能发布一些想法,而不是解决方案 1) 使用/f的迭代文件内容 2) 使用查找“%Keyword%”%SourceDir%
- 对文本文件的每一行项目(这是一个关键字列表)执行循环搜索,以查找特定目录中的文件
- 对于此搜索,部分匹配是可以的李>
- 每次找到文件时,将其移动到预定义目录(例如C:\temp\search\u results)
谢谢。我现在不运行Windows,所以我只能发布一些想法,而不是解决方案 1) 使用/f的
迭代文件内容
2) 使用查找“%Keyword%”%SourceDir%
获取匹配文件的列表。您必须从find
的输出中解析出文件名
2a)作为替代方法,您可以迭代源目录中的文件(使用嵌套的for
)并为每个文件调用find
,放弃其输出并使用其退出代码(%ERRORLEVEL%
)来确定文件是否匹配(如果存在匹配,则返回0,如果不匹配,则返回非零)。大概是这样的:
for %%F in (%SourceDir%\*) do (
find "%Keyword%" %%F > nul
if not errorlevel 1 (echo File %%F matches) else (echo File %%F does not match)
)
3) 使用Move
移动匹配文件我编写了以下代码,但不确定是否正确。以下是我的设置:
list.txt文件内容为(文件名搜索的我的关键字)--
f1文件夹包含--
我想把匹配的文件移到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
)
)
)
)
它正在运行,但找不到匹配的文件名
谢谢。有多个问题
查找/i“%A%”。。。无法工作,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,可以成批执行。。。但是,您可以使用移植到windows的免费unix实用程序(例如AWK),它们更灵活。我看不出您的代码中有任何问题。也许你应该试试。谢谢你,杰布。这对我帮助很大。我很喜欢你比较字符串和文件名的方式。我现在需要使用标准字符串的不同变体。文件中的行项目可能是“Stephen King”,文件名的变体可能是:-Stephen King-Stephen King-Stephen_King等。我将尝试捕获所有变体。再次感谢。您可以将字符串“Stephen King”拆分为标记“Stephen”和“King”,并测试文件名中是否存在所有标记
@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
)
)
)
)
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'
)
)
)