Ich versuche, ein einfaches CMD-Skript zu schreiben, um den Build meines Repos zu automatisieren. Hier ist das Skript in seiner Gesamtheit:Warum erhalte ich einen Syntaxfehler mit diesem CMD-Skript?
@echo off
setlocal
goto main
:: Functions
:buildSubdir
pushd %1
for /f %%projectFile in ('dir /b /s project.json') do (
dnu restore "%%projectFile"
dnu build "%%projectFile"
dnu pack "%%projectFile"
)
popd
goto :EOF
:main
:: Check for dnu
where dnu > NUL 2>&1
if %ERRORLEVEL% NEQ 0 (
echo dnu wasn't found in your PATH! 1>&2
echo See http://docs.asp.net/en/latest/getting-started/installing-on-windows.html for instructions on installing the DNX toolchain on your PC. 1>&2
exit /b %ERRORLEVEL%
)
:: Do the actual work
cd %~dp0
call :buildSubdir src
call :buildSubdir test
Im Grunde ist es was tut, ist zu versuchen, alle Dateien zu finden project.json
in einigen ausgewählten Verzeichnissen mit dem Namen (src
und test
), und führen Sie dnu restore
, dnu build
und dnu pack
auf sich .
Aus irgendeinem Grund scheint ich einen Syntaxfehler in der Zeile, wo ich eine for /f
Schleife eingeben, etwas über %projectFile
nicht erkannt zu werden. Here's ein Kern der vollen Ausgabe von meinem Terminal, wenn ich die @echo off
Anweisung entfernen und das Skript erneut ausführen.
Kann mir jemand sagen, warum das passiert und was ich tun kann, um es zu beheben? Vielen Dank.
edit: geändert einfach es dazu:
for /f %%p in ('dir /b /s project.json') do (
set projectFile=%%p
dnu restore "%projectFile%"
dnu build "%projectFile%"
dnu pack "%projectFile%"
)
noch nicht zu funktionieren scheint, obwohl die Fehlermeldungen jetzt unterschiedlich sind. Here's ein Kern des neuen Ausgangs. (Beachten Sie, dass %projectFile%
auf die leere Zeichenfolge festgelegt ist).
Variablen in Batch-Dateien lesen mit '%', so wäre es '% project%' sein. Sie referenzieren es auch in einer 'for'-Schleife, also müssen Sie' setlocal enabledelayedexpansion' verwenden. –
@KenWhite Nicht in 'for/f' Schleifen ... –
In 'for' Schleifen werden sie mit'! ', Als'! Projektdatei! 'Referenziert. Ich habe meinen Kommentar bearbeitet. :-) Sie müssen auch verzögerte Expansion aktivieren. –