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