2014-10-17 65 views
1

线如何防止“)”添加空间?

(FOR %F IN ("Q:\Playlists\A 1*.m3u") DO @echo "%~nF")| sed -E "s/.*/x&y/" 

产生

x"A 1 T Soft FC La melodia de nuestro adios" y 

而非

x"A 1 T Soft FC La melodia de nuestro adios"y 

如预期。

如何防止“)”添加此空间?

+0

Ash Burlaczenko,我删除了您添加的批处理文件标记。这个问题不是关于批处理文件。 – ChrisJJ 2014-10-17 23:07:07

回答

1

问题是你输入的命令被解析和执行的方式。管道的每一侧都在cmd.exe的独立实例内执行。这些实例不会执行您键入的代码,而是由解析器重新解释的稍微不同的版本。在这一步中已经包含了aditional空间(here,你可以通过dbenham找到更深入的分析)

我们不能避免解析器的工作方式,但我们可以生成一个命令,其中添加的空格不会影响输出

cmd /q /c "(for %f in ("Q:\Playlists\A 1*.m3u") do echo("%~nf")"| sed -E "s/.*/x&y/" 
+0

哦,亲爱的。我没有意识到CMD是多么的真实。谢谢。 FTR,基于你的最小变化修正为:cmd/q/c“(FOR%F IN(”Q:\ Playlists \ A 1 * .m3u“)DO @echo”%〜nF“)”| sed -E“s /.*/ x&y /” – ChrisJJ 2014-10-18 10:22:19

+0

@ChrisJJ,'cmd'调用中的'/ q'开关意味着以echo off开头,所以你不需要前缀'@'。 – 2014-10-18 10:47:34

+0

谢谢。因此,最小变化修正为:cmd/c“(FOR%F IN(”Q:\ Playlists \ A 1 * .m3u“)DO @echo”%〜nF“)”| sed -E“s /.*/ x&y /”。你的/ q比@有优势吗? – ChrisJJ 2014-10-21 14:33:54

0
(@FOR %F IN ("u:\sourcedir\A 1*.m3u") DO @ECHO x"%~nF"y) 

对我来说工作得非常好。不知道你为什么使用sed ...(我改变了目录以适应我的系统)

+0

是的,这也适用于我......但是没有答案:) SED给予更大的灵活性。 – ChrisJJ 2014-10-17 23:54:11