2014-10-17 46 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