(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 ("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
如预期。
如何防止“)”添加此空间?
问题是你输入的命令被解析和执行的方式。管道的每一侧都在cmd.exe
的独立实例内执行。这些实例不会执行您键入的代码,而是由解析器重新解释的稍微不同的版本。在这一步中已经包含了aditional空间(here,你可以通过dbenham找到更深入的分析)
我们不能避免解析器的工作方式,但我们可以生成一个命令,其中添加的空格不会影响输出
cmd /q /c "(for %f in ("Q:\Playlists\A 1*.m3u") do echo("%~nf")"| sed -E "s/.*/x&y/"
哦,亲爱的。我没有意识到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
@ChrisJJ,'cmd'调用中的'/ q'开关意味着以echo off开头,所以你不需要前缀'@'。 – 2014-10-18 10:47:34
谢谢。因此,最小变化修正为: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
(@FOR %F IN ("u:\sourcedir\A 1*.m3u") DO @ECHO x"%~nF"y)
对我来说工作得非常好。不知道你为什么使用sed
...(我改变了目录以适应我的系统)
是的,这也适用于我......但是没有答案:) SED给予更大的灵活性。 – ChrisJJ 2014-10-17 23:54:11
Ash Burlaczenko,我删除了您添加的批处理文件标记。这个问题不是关于批处理文件。 – ChrisJJ 2014-10-17 23:07:07