1

我是新手,所以请温柔!

我正在运行一个脚本,该脚本从程序中获取文件路径并将其放入 %1 中,这部分正在运行。

需要在 %1 中搜索 ~$,如果找到则删除该文件。

远的脚本:

set FILE_Path="%~1"  
ECHO "%FILE_PATH%" | FINDSTR "~$"  
IF..... **(not sure what to put in here)**  
DEL "%FILE_PATH%"  
PAUSE  

任何帮助表示赞赏

谢谢你

4

2 回答 2

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 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将涉及的字符串转换为二进制,进行数学运算,然后在分配结果时转换回字符串。

于 2013-05-16T00:58:24.783 回答
1

你可以有条件地执行:

set FILE_Path="%~1"
ECHO %FILE_PATH% | FIND "~$" && DEL /q /f %FILE_PATH%
PAUSE

这里有更多信息:http ://www.robvanderwoude.com/condexec.php

于 2013-05-15T21:13:09.983 回答