windows - 如何查找文件中的任何一个单词是否在一个很长的字符串中,该字符串在 CMD 批处理中经常更改
问题描述
我有这个文件名,它被放到 Windows 共享上的目录中,它需要位于用户本地计算机上的正确位置,具体取决于文件名中是否包含关键字之一。
例如:
z:\mailbox\in\Very_but#very-very!long#filenameWITH-keyword+in^it
z:
可以从一组 win-7 或 win-10 机器访问哪里。在这些机器上,有这两个目录:
c:\incoming\special
c:\incoming\regular
如果文件名中嵌入了关键字之一,则需要将其复制到c:\incoming\special
文件夹中,如果没有,则需要进入c:\incoming\regular
文件夹。
我的关键字在一个文件中,例如,c:\keywords.txt
在任何给定时间(每 5 分钟检查一次)可能没有文件,或者z:\mailbox\in
目录中只有一个文件。
所以,这就是我想出来的,但它不起作用:(批处理文件假设有一个文件要处理,我还没想好要做什么,如果还没有的话)
dir /b z:\mailbox\in > tmp.out
set /p file=<tmp.out
del tmp.out
set keyword_found_flag=0
for /F "tokens=*" %%keyword in (c:\keywords.txt) do (
echo %file% | find /i "%%keyword"
if errorlevel=0 set keyword_found_flag=1
)
无论是否找到关键字,错误级别始终为零
IF keyword_found_flag=1 (
copy z:\mailbox\in\%file% c:\incoming\special
) ELSE (
copy z:\mailbox\in\%file% c:\incoming\regular
)
我不确定在这里做什么。任何帮助表示赞赏
解决方案
如果执行匹配,为什么不使用运算符 ( &&
) 设置标志?
echo %file% | find /i "%%keyword" >nul && set keyword_found_flag=1
您也不需要为您的进程创建/删除 tmp.out 文件,使用 double for to 作为 z:\mailbox\in 中的文件名,并使用另一个 for 检查 c:\keywords.txt 中包含的文件z:\mailbox\in 中的文件名...
@echo off
set "keyword_found_flag=" && for /f tokens^=* %%i in ('dir /on /b /a:-d "z:\mailbox\in\*.*"
')do for /F tokens^=* %%K in ('type c:\keywords.txt')do echo="%%~i"| find /i "%%~K" && (
set "keyword_found_flag=1") || (set "keyword_found_flag=0")
或者...
@echo off
set "keyword_found_flag=" && for /f tokens^=* %%i in ('dir /on /b /a: -d "z:\mailbox\in\*.*"
')do for /F tokens^=* %%K in ('type c:\keywords.txt')do echo="%%~i"|find /i "%%~K" >nul && (
set "keyword_found_flag=1" && copy /v "%%~dpnxi" "c:\incoming\special\" ) || (
set "keyword_found_flag=0" && copy /v "%%~dpnxi" "c:\incoming\regular\" )
推荐阅读
- php - 如果变量仅等于 3,则脚本失败
- javascript - 我可以从 Javascript 触发 Yubikey 以在不触碰它的情况下给出响应吗?
- prestashop-1.7 - 在 Prestashop 1.7.3.0 的订单页面注销时出现 500 服务器错误
- azure - Azure 自定义视觉上的错误图像识别
- teamcity - Teamcity - 如何为包源设置凭据
- graphviz - Snakemake DAG 由于遇到文字点而无法工作 - 可能是 Graphiz 点问题?
- excel - 为什么我的自动过滤器用于删除带零的行后会删除标题?
- angular - 如何从 component.ts 中获取 Material DatePicker 的选定值
- symfony - Symfony4。登录前如何修改登录数据?
- android - 当视图状态从禁用更改为启用时,translationY 不执行上滑动画