2017-04-06 55 views
0

請溫柔...回波.bat文件到另一個.bat文件確切字符串

我想創建一個.BAT腳本來創建使用在第一個腳本設置變量另一個蝙蝠腳本。 我所有其他的'回聲'都以正確的格式輸出到SS_Update.bat。但我正在努力處理幾行無法正確複製的行。在 「設置新SS.bat」 我有......(斷章取義)

echo for /r %Tempfolder% %%%a in (*.zip) do set sszip=%%%~nxa >> %USERPROFILE%\Documents\%Site%\SS_Update.bat 
echo for /r %Tempfolder% %%%a in (*.zip) do set tempfile=%%%~dpnxa >> %USERPROFILE%\Documents\%Site%\SS_Update.bat 
echo for /f %%%i in (%currentss%) do set date1=%%%~ti >> %USERPROFILE%\Documents\%Site%\SS_Update.bat 
echo for /f %%%i in (%extractedss%) do set date2=%%%~ti >> %USERPROFILE%\Documents\%Site%\SS_Update.bat 
echo for /f %%%i in ('DIR /B /O:D %currentss% %extractedss%') do echo Current SS is older than the Extracted SS or missing... >> %USERPROFILE%\Documents\%Site%\SS_Update.bat 

在 「SS_Update.bat」 結果是...

for /r C:\Users\Pelican\Documents\Temp %%~nxa 
for /r C:\Users\Pelican\Documents\Temp %%~dpnxa 
for /f %currentss%~ti 
for /f %extractedss%~ti 
for /f %D ') do echo Current SS is older than the Extracted SS or missing... 

我明白,我需要轉義一些特殊字符,即我想%%,所以我用%%%。我嘗試了所有可以用Escape Characters的例子想到的組合,但是我一直在遠離自己。

任何幫助,將不勝感激!

+0

你在'set'中缺少一個額外的'%',比如'set sszip = %%%%〜nxa' –

回答

0

您可以通過在var前面加上包含回顯和重定向的行來緩解任務,所以代碼看起來很正常,除了必要的加倍和轉義<>|&

Set _=^>^> "%USERPROFILE%\Documents\%Site%\SS_Update.bat" Echo 
%_% for /r %Tempfolder% %%%%a in (*.zip) do set sszip=%%%%~nxa 
%_% for /r %Tempfolder% %%%%a in (*.zip) do set tempfile=%%%%~dpnxa 
%_% for /f %%%%i in (%currentss%) do set date1=%%%%~ti 
%_% for /f %%%%i in (%extractedss%) do set date2=%%%%~ti 
%_% for /f %%%%i in ('DIR /B /O:D %currentss% %extractedss%') do echo Current SS is older than the Extracted SS or missing... 
0

我寧願將這些命令放在單個重定向中。 (唯一的問題是使用標準旋轉字符轉義內部右括號)。爲了逃避一個百分比字符,你使用了另一個百分比字符,所以要回顯兩個字符,你需要四個字符。

>>"%USERPROFILE%\Documents\%Site%\SS_Update.bat" (
    ECHO FOR /R "%Tempfolder%" %%%%A IN (*.zip^) DO SET "sszip=%%%%~nxA" 
    ECHO FOR /R "%Tempfolder%" %%%%A IN (*.zip^) DO SET "tempfile=%%%%~dpnxA" 
    ECHO FOR /F %%%%I IN (%currentss%^) DO SET "date1=%%%%~tI" 
    ECHO FOR /F %%%%I IN (%extractedss%^) DO SET "date2=%%%%~tI" 
    ECHO FOR /F %%%%I IN ('DIR/B/OD %currentss% %extractedss%'^) DO (
    ECHO ECHO Current SS is older than the Extracted SS or missing...^) 
)