2015-10-04 17 views
2

我該如何逃避嵌入!用於延遲擴展PL PL!的變量PL的值中的字符,使得它們不被解釋爲分隔符?如何逃生!在一個變量的值?

E.g.在%% P包含時糾正這種失敗! 。

FOR %%P IN (%input%\*.M3U) DO (
    echo Processing playlist "%%P" 

    SETLOCAL ENABLEDELAYEDEXPANSION 
    FOR /F "tokens=*" %%L IN ('type "%%P"') DO (
     SET PL=%%~pP%%L 
     echo Processing reference "!PL!" 
    ) 
    ENDLOCAL 
) 

編輯:保羅的有限適用性的解決方法:

FOR %%P IN (%input%\*.M3U) DO (
    echo Processing playlist "%%P" 

    FOR /F "tokens=*" %%L IN ('type "%%P"') DO (
     SET PL=%%~pP%%L 
     SETLOCAL ENABLEDELAYEDEXPANSION 
     echo Processing reference "!PL!" 
     ENDLOCAL 
    ) 
) 
+1

可能的重複[我如何逃避感嘆號!在cmd腳本?](http://stackoverflow.com/questions/3288552/how-can-i-escape-an-exclamation-mark-in-cmd-scripts) – aschipfl

回答

1

我不知道你怎麼能查找/替換!!var!!myvar:^^!=!!不起作用),但你可以

@echo off 
(
echo !!myfolder 
echo myfi!es 
echo !234 
)>sample.txt 
for /f %%a in (sample.txt) do (
    set "myvar=%%a" 
    setlocal enabledelayedexpansion 
    echo !myvar! 
    endlocal 
) 

你可以在你的代碼像這樣轉:在VAR像顯示!

for %%p in (%input%\*.m3u) do (
    echo processing playlist "%%p" 

    for /f "tokens=*" %%l in ('type "%%p"') do (
     set pl=%%~pp%%l 
     setlocal enabledelayedexpansion 
     echo processing reference "!pl!" 
     endlocal 
    ) 
) 
+0

只能用百分比擴展來替換它。 'echo%myvar:!= someThingElse%' – jeb

+0

@Paul感謝您的轉換解決方法。工作正常。仍然有一個完整的解決方案是有用的。並感謝塊重定向技術,這將有望改善我未來的SO CMD問題:) – ChrisJJ