2014-04-24 655 views
-2

我想編寫一個批處理文件,使另一個批處理文件,使文件。批處理文件使另一個批處理文件,使另一個文件

我寫過這樣的東西。

echo:IF EXIST %%ALLUSERSPROFILE%%\Pulpit (SET AutoStart="%%ALLUSERSPROFILE%%\Menu Start\Programy\Autostart\go2.bat")> %Esc_LinkTarget%\GO.BAT 
echo:IF EXIST %%ALLUSERSPROFILE%%\Desktop (SET AutoStart="%%ALLUSERSPROFILE%%\Microsoft\Windows\Start Menu\Programs\Startup\go2.bat") >> %Esc_LinkTarget%\GO.BAT 
echo:ECHO:REM DEKLARACJA LITERY MAPOWANEGO DYSKU ^> %%AutoStart%% >> %Esc_LinkTarget%\GO.BAT 
echo:ECHO:SET MapLetter=T: ^>^> %%AutoStart%% >> %Esc_LinkTarget%\GO.BAT 
echo:ECHO:NET USE %%%%MapLetter%%%%\\%COMPUTERNAME%\%LinkName% ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:ECHO:echo:IF EXIST %%%%ALLUSERSPROFILE%%%%\Pulpit (SET Esc_LinkDest=%%%%ALLUSERSPROFILE%%%%\Pulpit\) %%>>%% %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:ECHO:echo:IF EXIST %%%%ALLUSERSPROFILE%%%%\Desktop (SET Esc_LinkDest=%%%%ALLUSERSPROFILE%%%%\Desktop\) ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:ECHO:echo:IF EXIST %%%%ALLUSERSPROFILE%%%%\Pulpit\%LinkName%.lnk GOTO DLP1 ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:ECHO:echo:IF EXIST %%%%ALLUSERSPROFILE%%%%\Desktop\%LinkName%.lnk GOTO DLP1 ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:echo:echo Set oWS = WScript.CreateObject("WScript.Shell") ^^> tmp.vbs ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:echo:echo sLinkFile = "%%%%Esc_LinkDest%%%%%LinkName%.lnk" ^^>^^> tmp.vbs ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:echo:echo Set oLink = oWS.CreateShortcut(sLinkFile) ^^>^^> tmp.vbs ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:echo:echo oLink.TargetPath = "%%%%MapLetter%%%%\" ^^>^^> tmp.vbs ^>^>%%AutoStart%% >> %Esc_LinkTarget%\GO.BAT 
echo:echo:echo oLink.Save ^^>^^> tmp.vbs ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:echo:cscript //nologo .\tmp.vbs 6^>^^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:echo:del .\tmp.vbs >^^^^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 
echo:echo:^:DLP1 ^>^> %%AutoStart%% >>%Esc_LinkTarget%\GO.BAT 

...我想那GO.BAT有這樣的事情...

IF EXIST %%ALLUSERSPROFILE%%\Pulpit (SET AutoStart="%%ALLUSERSPROFILE%%\Menu Start\Programy\Autostart\go2.bat") 
IF EXIST %%ALLUSERSPROFILE%%\Desktop (SET AutoStart="%%ALLUSERSPROFILE%%\Microsoft\Windows\Start Menu\Programs\Startup\go2.bat") 
ECHO:REM DEKLARACJA LITERY MAPOWANEGO DYSKU > %%AutoStart%% 
ECHO:SET MapLetter=T: >> %%AutoStart%% 
ECHO:NET USE %%%%MapLetter%%%%\\%COMPUTERNAME%\%LinkName% >> %%AutoStart%% 
echo:IF EXIST %%%%ALLUSERSPROFILE%%%%\Pulpit (SET Esc_LinkDest=%%%%ALLUSERSPROFILE%%%%\Pulpit\) >> %%AutoStart%% 
echo:IF EXIST %%%%ALLUSERSPROFILE%%%%\Desktop (SET Esc_LinkDest=%%ALLUSERSPROFILE%%\Desktop\) >> %%AutoStart%% 
echo:IF EXIST %%ALLUSERSPROFILE%%\Pulpit\%LinkName%.lnk GOTO DLP1 >> %%AutoStart%% 
echo:IF EXIST %%ALLUSERSPROFILE%%\Desktop\%LinkName%.lnk GOTO DLP1 >> %%AutoStart%% 
echo:echo Set oWS = WScript.CreateObject("WScript.Shell") ^>^> tmp.vbs >> %%AutoStart%% 
echo:echo sLinkFile = "%%Esc_LinkDest%%%%LinkName%%.lnk" ^>^> tmp.vbs >> %%AutoStart%% 
echo:echo Set oLink = oWS.CreateShortcut(sLinkFile) ^>^> tmp.vbs >> %%AutoStart%% 
echo:echo oLink.TargetPath = "%%MapLetter%%\" ^>^> tmp.vbs >> %%AutoStart%% 
echo:echo oLink.Save ^>^> tmp.vbs >> %%AutoStart%% 
echo:cscript //nologo .\tmp.vbs >> %%AutoStart%% 
echo:del .\tmp.vbs >> %%AutoStart%% 
echo:^:DLP1 >> %AutoStart% 

和go2.bat有這樣的:

ECHO:REM DEKLARACJA LITERY MAPOWANEGO DYSKU 
SET MapLetter=T: 
NET USE %MapLetter%\\%COMPUTERNAME%\%LinkName% 
IF EXIST %ALLUSERSPROFILE%\Pulpit (SET Esc_LinkDest=%ALLUSERSPROFILE%\Pulpit\) 
IF EXIST %ALLUSERSPROFILE%\Desktop (SET Esc_LinkDest=%ALLUSERSPROFILE%\Desktop\) 
IF EXIST %ALLUSERSPROFILE%\Pulpit\%LinkName%.lnk GOTO DLP1 
IF EXIST %ALLUSERSPROFILE%\Desktop\%LinkName%.lnk GOTO DLP1 
echo Set oWS = WScript.CreateObject("WScript.Shell") >> tmp.vbs 
echo sLinkFile = "%Esc_LinkDest%%LinkName%.lnk" >> tmp.vbs 
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> tmp.vbs 
echo oLink.TargetPath = "%%MapLetter%%\" >> tmp.vbs 
echo oLink.Save >> tmp.vbs 
cscript //nologo .\tmp.vbs 
del .\tmp.vbs 
:DLP1 

你能幫助我有了這個?我不知道如何編寫第一個創建go2.bat的文件

回答

0

您可以使用Notepad ++或使用任何其他允許使用正則表達式進行搜索和替換的實用程序輕鬆地進行此類轉換。你只需要搜索並替換以下內容:(替代的順序很重要)

replace "^" with "echo " 
replace "\^" with "\^\^" 
replace ">" with "^>" 
replace "%" with "%%" 
replace "$" with " >> go2.bat" 

有需要在這樣的操作逃逸更多的人物,但在go2.bat的情況下,只有>%需要它。您應該諮詢http://www.robvanderwoude.com/escapechars.php並嘗試編寫適當的正則表達式。

此外,我建議您在腳本開始處添加一行以刪除go2.bat(如果它已存在)。或者您可以手動將第一個>>更改爲>,因此現有的go2.bat將始終被截斷。

UPDATE:

只使用上面我已經爲它與其他創建批處理腳本您樣品批處理腳本創建替換規則創建另一個批處理腳本。我已經使用了上述規則兩次 - 首先爲最後一個腳本創建生成器,然後創建生成器的生成器。在這裏,請檢查:

echo echo ECHO:REM DEKLARACJA LITERY MAPOWANEGO DYSKU ^> drugi.bat > pierwszy.bat 
echo echo SET MapLetter=T: ^>^> drugi.bat >> pierwszy.bat 
echo echo NET USE %%%%MapLetter%%%%\\%%%%COMPUTERNAME%%%%\%%%%LinkName%%%% ^>^> drugi.bat >> pierwszy.bat 
echo echo IF EXIST %%%%ALLUSERSPROFILE%%%%\Pulpit (SET Esc_LinkDest=%%%%ALLUSERSPROFILE%%%%\Pulpit\) ^>^> drugi.bat >> pierwszy.bat 
echo echo IF EXIST %%%%ALLUSERSPROFILE%%%%\Desktop (SET Esc_LinkDest=%%%%ALLUSERSPROFILE%%%%\Desktop\) ^>^> drugi.bat >> pierwszy.bat 
echo echo IF EXIST %%%%ALLUSERSPROFILE%%%%\Pulpit\%%%%LinkName%%%%.lnk GOTO DLP1 ^>^> drugi.bat >> pierwszy.bat 
echo echo IF EXIST %%%%ALLUSERSPROFILE%%%%\Desktop\%%%%LinkName%%%%.lnk GOTO DLP1 ^>^> drugi.bat >> pierwszy.bat 
echo echo echo Set oWS = WScript.CreateObject("WScript.Shell") ^^^>^^^> tmp.vbs ^>^> drugi.bat >> pierwszy.bat 
echo echo echo sLinkFile = "%%%%Esc_LinkDest%%%%%%%%LinkName%%%%.lnk" ^^^>^^^> tmp.vbs ^>^> drugi.bat >> pierwszy.bat 
echo echo echo Set oLink = oWS.CreateShortcut(sLinkFile) ^^^>^^^> tmp.vbs ^>^> drugi.bat >> pierwszy.bat 
echo echo echo oLink.TargetPath = "%%%%%%%%MapLetter%%%%%%%%\" ^^^>^^^> tmp.vbs ^>^> drugi.bat >> pierwszy.bat 
echo echo echo oLink.Save ^^^>^^^> tmp.vbs ^>^> drugi.bat >> pierwszy.bat 
echo echo cscript //nologo .\tmp.vbs ^>^> drugi.bat >> pierwszy.bat 
echo echo del .\tmp.vbs ^>^> drugi.bat >> pierwszy.bat 
echo echo :DLP1 ^>^> drugi.bat >> pierwszy.bat 
+0

MOGE CIEprosićżebyśprzerobił英里jednąlinijkękodu德BYM MIALprzykład做przerobienia reszty。 Natakąktóraznajdowałabysięw pierszym pilku,tworzyładrugi plikiktórystworzy trzeci。 Ze zeminnymi sobieporadzę問題sprawijąmi strumienie。 – user3569199

+0

@ user3569199,zaktualizowałemmojąodpowiedźoprzykładskryptugenerującegoplik'pierwszy.bat' apóźniej'drugi.bat',któryodpowiada Twojemu plikowi'go2.bat'。 Nie wiem jak skomplikowane te skrypty chcesz「opakowywać」igenerowaćinnymi skryptami,ale dasięto wszystkorobićwyrażeniamiregularnymi,chociażwniektórychprzypadkachmożetosięrobićskomplikowane。 Wtreścimojej odpowiedzipodałem鏈接做strony internetowej z「轉義字符」。 –

+0

Btw,zaktualizowałemmojąwypowiedźnie tylko po napise「UPDATE」,aletakżei przed,więcpolecamprzeczytaćcałośćmojej wypowiedzi。 –

1

,如果你喜歡一個解決方案,而無需擔心轉義字符:

@echo off 
rem go.bat 
echo hello, this is file nr. 1 
echo it will create file nr. 2 
for /f "delims=:" %%i in ('findstr /n /b "::DATA1" "%~df0"') do set datastart=%%i 
more +%datastart% "%~df0" >go1.bat 
set a=alpha 
set b=beta 
echo starting go1.bat: 
call go1.bat 
echo back to the root. 
echo %a%,%b%,%c%,%ab%,%bc% 
exit /b 

::DATA1 
rem go1.bat 
echo hello, this is file nr. 2 
echo it will create file nr. 3 
for /f "delims=:" %%i in ('findstr /n /b "::DATA2" "%~df0"') do set datastart=%%i 
more +%datastart% "%~df0" >go2.bat 
set c=gamma 
set ab=%a%%b% 
echo starting go2.bat 
call go2.bat 
echo back to level 1 
echo doing something more 
echo %a%,%b%,%c%,%ab%,%bc% 
exit /b 

::DATA2 
rem go2.bat 
echo  hello, this is file nr. 3 
echo  I will do something. 
set bc=%b%%c% 
echo  %a%,%b%,%c%,%ab%,%bc% 
exit /b 
相關問題