batch-file
Hybrydy wsadowe i JSCript
Szukaj…
Wprowadzenie
JScript jest tak naprawdę nadzbiorem Javascript (jest to wersja 1.8.1 - więc niektóre nowsze funkcje nie są dostępne) i można je osadzić w skrypcie batch celu rozszerzenia funkcji skryptu batch . Zazwyczaj techniki osadzania wykorzystują dyrektywy JScript (nie będące częścią oficjalnego standardu Javascript) w celu oddzielenia kodu wsadowego i kodu JScript. JScript umożliwia pracę z obiektami Com / ActiveX, a także z obiektami WMI oprócz standardowego Javascript.
Osadzony JScript w pliku wsadowym
Poniższy przykład został stworzony przez użytkownika Michaela Dillona z tej odpowiedzi .
Rozważ następujący skrypt:
@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/
//JScript aka Javascript here
Ten fragment skryptu:
Wykonaj polecenie
cscriptktóre wywołuje się ze wszystkimi podanymi argumentami.Ponieważ część po
@set @junk=1jest komentowana (/*i*/są poprawnymi komentarzami JScript),JScript je zignoruje.
Uwaga: Potrzebujemy części
@set @junk=1ponieważ plik wsadowy nie rozpoznaje/*jako polecenia, ale instrukcjasetbędzie obejściem problemu. JScript rozpozna/*jako komentarz, więc drugi plikbatchnie zostanie wykonany przez silnik JScript.
Możesz dodać JScript po */ i rozpocząć rozszerzanie skryptów plików wsadowych!
Uruchom JScript z plikami tymczasowymi
Jak wspomniano tutaj , oldskulową metodą uruchomienia innego skryptu jest użycie plików tymczasowych. Po prostu echo w pliku, a następnie uruchom go (i opcjonalnie usuń).
Oto podstawowa koncepcja:
@echo off
echo //A JS Comment > TempJS.js
echo //Add your code>>TempJS.js
cscript //nologo //e:cscript.exe TempJS.js
del /f /s /q TempJS.js
Ale to wymagałoby wielu instrukcji echo , aby stworzyć stosunkowo duży JScript. Oto lepsza metoda Aacini.
@echo off
setlocal
rem Get the number of the "<resource>" line
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a"
rem Skip such number of lines and show the rest of this file
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > TempJS.js
cscript //nologo //e:cscript.txt TempJS.js
del /f /s /q TempJS.js
goto :EOF
<resource>
JScript
JScript
JScript