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
cscript
które wywołuje się ze wszystkimi podanymi argumentami.Ponieważ część po
@set @junk=1
jest komentowana (/*
i*/
są poprawnymi komentarzami JScript),JScript je zignoruje.
Uwaga: Potrzebujemy części
@set @junk=1
ponieważ plik wsadowy nie rozpoznaje/*
jako polecenia, ale instrukcjaset
będzie obejściem problemu. JScript rozpozna/*
jako komentarz, więc drugi plikbatch
nie 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