Batch file 批次cmd赢得';不接受重定向符号
我有一个批处理脚本,它运行一个命令,该命令应将结果转发到一个文件:Batch file 批次cmd赢得';不接受重定向符号,batch-file,cmd,escaping,Batch File,Cmd,Escaping,我有一个批处理脚本,它运行一个命令,该命令应将结果转发到一个文件: start cmd /k "tasklist | find ^"Notepad^" ^> ^"C:\Users\Improvise\Desktop\notepadDeets.txt^"" 以下内容在cmd提示符中起作用: tasklist | find "Notepad" > "C:\Users\Improvise\Deskt
start cmd /k "tasklist | find ^"Notepad^" ^> ^"C:\Users\Improvise\Desktop\notepadDeets.txt^""
以下内容在cmd提示符中起作用:
tasklist | find "Notepad" > "C:\Users\Improvise\Desktop\notepadDeets.txt"
在此脚本中,命令的工作方式如下:
start cmd /k "tasklist | find ^"Notepad^""
但是当我尝试添加>“C:\Users\Improvise\Desktop\notepadDeets.txt”
使用^>
时,错误消息为:
Access denied - >
FIND: Parameter format not correct
Access denied - >
FIND: Parameter format not correct
使用
时,错误消息为:
Access denied - >
FIND: Parameter format not correct
Access denied - >
FIND: Parameter format not correct
我没有正确地转义这个字符吗?为什么它在批处理脚本中不起作用,我如何才能使它起作用?不需要在外部引号中转义特殊字符。从
cmd/?
:
[…]否则,旧的行为是查看第一个字符是否是引号字符,如果是,则去掉前导字符并删除命令行上的最后一个引号字符[…]
以下工作将起作用:
start cmd /k "tasklist | find /I "Notepad" >"C:\Users\Improvise\Desktop\notepadDeets.txt""
或者,不带所有引号,并转义特殊字符:
start cmd /k tasklist ^| find /I "Notepad" ^>"C:\Users\Improvise\Desktop\notepadDeets.txt"
[编辑]下面解释了原始帖子中引用的错误 使用
^>
时,错误消息为:
Access denied - >
FIND: Parameter format not correct
Access denied - >
FIND: Parameter format not correct
使用^>
将未扫描的
传递给find
命令,该命令将其解释为要搜索的文件名。这会失败,因为
是非法文件名,并且由于某种原因会报告为“拒绝访问”错误。可以在命令提示下复制相同错误的变体:
C:\etc>find "notepad" ^>
Access denied - >
C:\etc>find "notepad" ^> nul
Access denied - >
File not found - NUL
C:\etc>find "notepad" ^>nul
File not found - >NUL
使用
时,错误消息为:
Access denied - >
FIND: Parameter format not correct
Access denied - >
FIND: Parameter format not correct
使用未切换的
时,重定向应用于顶层的start
命令,因此执行的是cmd/k“tasklist | find^“Notepad”
,它最终运行find^“Notepad
,导致“参数格式不正确”错误:
为什么在.bat文件脚本中使用
start
。我以为这就是执行命令的语法。在同一个bat文件中,我有另一个start cmd/k“…”
,可以正常工作。无需删除内部引号或重定向。只需像平常一样使用引号,并继续用引号括住整个命令。我认为使用START
或CMD/K
没有任何意义。为什么你想在那里留下一个打开的窗口?你的观点是什么?我没告诉你不要用引号。我说过要像平常一样使用引号。我不知道你为什么选择逃避他们和重定向符号。