用于搜索“%~1”中内容的批处理文件

时间:2013-05-15 21:04:35

标签: batch-file

我是新手,所以请保持温柔!

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

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

远程脚本:

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

任何帮助表示赞赏

谢谢

2 个答案:

答案 0 :(得分:1)

你可以只是条件执行:

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

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

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