我是新手,所以请保持温柔!
运行一个脚本,该脚本从程序中获取文件路径并将其放入%1,这部分正在运行。
需要在%1中搜索〜$,如果找到则删除该文件。
远程脚本:
set FILE_Path="%~1"
ECHO "%FILE_PATH%" | FINDSTR "~$"
IF..... **(not sure what to put in here)**
DEL "%FILE_PATH%"
PAUSE
任何帮助表示赞赏
谢谢
答案 0 :(得分:1)
你可以只是条件执行:
set FILE_Path="%~1"
ECHO %FILE_PATH% | FIND "~$" && DEL /q /f %FILE_PATH%
PAUSE
答案 1 :(得分:1)
@ECHO OFF
SETLOCAL
set "FILE_Path=%~1"
IF NOT DEFINED file_path ECHO no File Path provided&GOTO :eof
ECHO %~1| FINDSTR "~$"
IF NOT ERRORLEVEL 1 ECHO DEL %FILE_PATH%
现在 - 一些警告。
使用file_path
设置set FILE_Path="%~1"
将起作用,但变量file_path
(变量名称不区分大小写)与((第一个参数减去封闭引号)括在引号中)
将再次用引号括起来的那个版本(将引号加倍)到FINDSTR
应该做findstr
的事情 - 而你的对象似乎是在~$
找到FINDSTR
string(但你没有明确指定)
errorlevel
会尽职地报告找到的所有匹配字符串,如果找到则将if not errorlevel 1 ....
设置为0,否则设置为1。
你正在寻找的神奇线是
if errorlevel 0 ....
,因为
if errorlevel n
将始终触发 - if errorlevel is n OR GREATER THAN n
语法表示if %errorlevel%==0 ...
可以使用
if %errorlevel% equ 0 ...
或
block
但是这种语法在{/ 1}}语句中不起作用,如
for ... do (something & something else&if %errorlevel%==0 anotherthing)
这个方案中有一个令人讨厌的陷阱。默认情况下,findstr
匹配regular expressions
- 所以findstr "~$"
将匹配字符串末尾的~
,而不是字符串中任何位置的~$
。
由于您没有说出您想要的匹配项,因此无法说明您是否真的想要findstr "~$"
(在结尾找到~
)或findstr /l "~$"
(找到“〜$”在某处) - 或者FIND "~$"
可能更适合您的目的(FIND
,而不是FINDSTR
)
回到你的原文,然后 - 你正在做的是将字符串""parameter one""
回显到findstr - 它不会以~
结尾,因此永远不会被发现......
正如我发布的那样,在file_path
周围设置整个赋值子句的引号可以确保变量不会被设置为(编辑器留下的行上的任何尾随空格) - 这是一个正确的指针找到你第一次遇到它(请注意批处理对杂散空间非常敏感 - 你必须在SET
之前在=
中省略它们,否则它们会被包含在变量名中以及{ {1}}否则它们会被包含在分配给=
的值中,这是一种不同的动物 - 它容忍空格......)
我还将报价计数减少到一个合理的数字 - 只需要那些。 Batch ALWAYS适用于字符串。没有例外。甚至SET /A
将所涉及的字符串转换为二进制,进行数学运算,然后在分配结果时转换回字符串。