【发布时间】:2015-10-02 22:30:15
【问题描述】:
这很好用。
FOR /f "delims=" %%G in ('TagRead.exe %%L Genre') DO ( echo %GG )
但是当我将 sed 命令添加到 ('...') 时,它会失败
FOR /f "delims=" %%G in (
'TagRead.exe %%L Genre ^| sed -E ''/Curtain^|Exit^|Spacer/^^!s~.*~Dance~'' '
) DO ( echo %%G)
输出:
sed: newline or end of file found in pattern
编辑:尽管这个无循环命令成功了:
TagRead.exe C:\temp\1.wma Genre | sed -E '/Curtain^|Exit^|Spacer/^!s~.*~Dance~'
如何让 sed 命令及其引号被 (...) 引号所接受?
编辑:dbenham 说:“与 FOR /F 一起使用时,单引号永远不需要转义。最外面的单引号分隔命令字符串,任何内部单引号都可以正常工作。”
解决方案如下:
FOR /f "delims=" %%G in (
'TagRead.exe %%L Genre ^| sed -E '/Curtain^|Exit^|Spacer/^^!s~.*~Dance~''
) DO ( echo %%G)
失败了:
The syntax of the command is incorrect.
编辑:这是一个简化的独立版本,希望能解决这个问题:
FOR /f "delims=" %%G in (
'echo xxx ^| sed -E '/yyy/^^!s~.*~zzz~''
) DO ( echo %%G)
成功:
zzz
这个:
echo xxx | sed -E '/yyy^|uuu/^!s~.*~zzz~'
成功:
zzz
这个:
FOR /f "delims=" %%G in (
'echo xxx ^| sed -E ''/yyy^|uuu/^^!s~.*~zzz~'''
) DO ( echo %%G)
失败:
'uuu' is not recognized as an internal or external command, operable program or batch file.
----------- 解决方案-----------
失败的原因不是引号。这是一些没有充分逃脱的^。从 dbenham 的 1) 中,最小的修复是:
FOR /f "delims=" %%G in (
'TagRead.exe %%L Genre ^| sed -E ''/Curtain^^^|Exit^^^|Spacer/^^!s~.*~Dance~'' '
) DO ( echo %%G)
对于简化版:
FOR /f "delims=" %%G in (
'echo xxx ^| sed -E ''/yyy^^^|uuu/^^!s~.*~zzz~'''
) DO ( echo %%G)
也可以去掉一些多余的 ' :
FOR /f "delims=" %%G in (
'TagRead.exe %%L Genre ^| sed -E '/Curtain^^^|Exit^^^|Spacer/^^!s~.*~Dance~' '
) DO ( echo %%G)
和
FOR /f "delims=" %%G in (
'echo xxx ^| sed -E '/yyy^^^|uuu/^^!s~.*~zzz~''
) DO ( echo %%G)
编辑:一个更简单的实例中的解决方案:
FOR /f "delims=" %%G in ('echo "xxx^^^|ppp" ^| find "x^^^|p"') DO ( echo %%G)
【问题讨论】:
-
请显示独立工作的完整命令(不带 FOR /F),然后我可以提供一个或多个选项以将命令包含在 FOR /F IN() 子句中。跨度>
-
@dbenham 谢谢,我已经完成了。另外添加了一个简化示例。
-
发布的无循环命令不可能工作 - 你错误地逃脱了管道。请在没有循环的情况下从批处理脚本执行命令,当您有工作版本时,从脚本中复制命令并将其粘贴到已编辑的问题中。
-
你是对的。它被接受了,但没有成功。我已经纠正了。谢谢。
-
使用您向我们展示的命令应该显示什么输出?
for /f "delims=" %g in ('echo xxx ^| sed -E '/yyy^^^|uuu/^^!s~.*~zzz~'') do @( echo %g)
标签: windows batch-file for-loop sed cmd