2014-04-24 484 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 
相关问题