Windows 7 我该如何防止“)&引用;添加空间?

Windows 7 我该如何防止“)&引用;添加空间?,windows-7,cmd,Windows 7,Cmd,线路 (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 正如所料 如何防止“)”添加此空间 (@FOR %F IN ("u:\sourcedir\A 1*.m3u") DO @ECHO x

线路

(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
正如所料

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

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

对我来说效果很好。不知道为什么要使用
sed
…(我更改了目录以适应我的系统)

问题在于您键入的命令的解析和执行方式。管道的每一侧都在
cmd.exe
的单独实例中执行。这些实例不会执行您键入的代码,而是执行已由解析器重新解释的稍有不同的版本。在这一步中,传统空间被包括在内(您可以找到dbenham的更深入分析)

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

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

Ash Burlaczenko,我删除了你添加的批处理文件标签。这个问题不是关于批处理文件的。是的,这对我也适用。。。但是没有答案:)sed提供了更大的灵活性。我还没有意识到博克的真实面目。谢谢FTR,基于您的最小更改修复是:cmd/q/c“(对于%F IN(“q:\Playlists\A 1*.m3u”)DO@echo“%~nF”)”;sed-E“s/*/x&y/“@ChrisJJ,调用
/q
cmd中的
/code>开关意味着从关闭echo开始,因此,您不需要
@
前缀。谢谢。因此,最小的修改修改为:cmd/c“(对于“(“Q:\Playlists\A 1*.m3u”)中的%F,DO@echo“%~nF”)“| sed-E“s/*/x&y/”。你的/q比@有优势吗?@ChrisJJ,在这种情况下,没有优势,只有一个命令不需要响应。我只是指最后命令中的冗余。谢谢你的澄清。