Batch file 批处理文件以搜索“中的内容”~1“;
我是新手,所以请温柔一点 我正在运行一个脚本,该脚本从程序中获取一个文件路径并将其放入%1,此部分正在工作 需要在%1中搜索~$,如果找到,请删除该文件 far的脚本:Batch file 批处理文件以搜索“中的内容”~1“;,batch-file,Batch File,我是新手,所以请温柔一点 我正在运行一个脚本,该脚本从程序中获取一个文件路径并将其放入%1,此部分正在工作 需要在%1中搜索~$,如果找到,请删除该文件 far的脚本: set FILE_Path="%~1" ECHO "%FILE_PATH%" | FINDSTR "~$" IF..... **(not sure what to put in here)** DEL "%FILE_PATH%" PAUSE 谢谢你的帮助 谢谢您可以只执行条件执行: set FILE_Pat
set FILE_Path="%~1"
ECHO "%FILE_PATH%" | FINDSTR "~$"
IF..... **(not sure what to put in here)**
DEL "%FILE_PATH%"
PAUSE
谢谢你的帮助
谢谢您可以只执行条件执行:
set FILE_Path="%~1"
ECHO %FILE_PATH% | FIND "~$" && DEL /q /f %FILE_PATH%
PAUSE
以下是更多信息:
现在-一些警告
使用set file_path=“%~1”
设置file_path
将起作用,但变量file_path
(变量名称不区分大小写)将设置为((第一个参数减去引号)括在引号中)
在FINDSTR
中再次使用引号(将引号加倍)回显该版本应该是FINDSTR
的事情-您的对象似乎是在字符串中查找~$
(但您没有明确指定)
FINDSTR
将尽职尽责地报告找到的任何匹配字符串,并将errorlevel
设置为0(如果找到),如果未找到,则设置为1
你要找的魔线是
if not errorlevel 1 ....
因为
if errorlevel 0 ....
将始终触发-如果errorlevel n语法表示如果errorlevel为n或大于n
可以使用
if %errorlevel%==0 ...
或
但是这种语法在块
语句中不起作用,比如
for ... do (something & something else&if %errorlevel%==0 anotherthing)
这个计划有一个令人讨厌的陷阱。默认情况下,findstr
与regular expressions
匹配,因此findstr“~$”
将匹配字符串末尾的~
,而不是字符串中的任何位置
因为你没有说你想要哪一个匹配,所以不可能说你是真的想要findstr“~$”
(在末尾查找~
)还是findstr/l“~$”
(在某处查找“~$”),或者find“~$”
可能更适合你的目的(find
,而不是findstr
)
然后,返回到您的原始版本-您所做的是将字符串“参数一”
回显到findstr中-它不会以~
结尾,因此永远也找不到
正如我所发布的,在整个赋值子句周围设置带引号的file\u path
,可以确保变量不会被设置为(编辑器左侧行上的任何尾随空格)-这是您第一次遇到它时的右键(请注意,批处理对零散空格非常敏感-在=
之前,必须在集合中省略它们,否则它们会包含在变量名中,在=
之后,它们也会包含在分配的值中集合/a
是另一种动物-它容忍空格…)
我还将引号计数减少到一个合理的数字-仅限那些必需的数字。批处理始终对字符串有效。没有例外。即使set/a
将涉及的字符串转换为二进制,进行数学运算,然后在分配结果时将其转换回字符串。+1,不确定OP是否希望$
为文本,或者正则表达式行尾锚点。如果它是一个文本,那么应该在FINDSTR命令中添加/L选项,以强制解释为文本字符串。对不起,我应该说是的,我想查找~$I在FINDSTR/L“~$”(在某处查找“~$”)我会在早上试一下,让你知道我们需要多少时间来测试这个
if %errorlevel% equ 0 ...
for ... do (something & something else&if %errorlevel%==0 anotherthing)