Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件以搜索“中的内容”~1“;_Batch File - Fatal编程技术网

Batch file 批处理文件以搜索“中的内容”~1“;

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

我是新手,所以请温柔一点

我正在运行一个脚本,该脚本从程序中获取一个文件路径并将其放入%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_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)