私はレポのビルドを自動化するための簡単なCMDスクリプトを書こうとしています。ここでは、その全体がスクリプトです:基本的にこのCMDスクリプトで構文エラーが発生するのはなぜですか?
@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
は、どのようなことがないことは、いくつかの選択のディレクトリ(src
とtest
)でproject.json
という名前のすべてのファイルを検索してみてください、そして、dnu restore
dnu build
を実行しており、それらの上にdnu pack
。
何らかの理由で、私がfor /f
ループを入力したところで文法エラーが発生していると思われ、%projectFile
が認識されていないと言っています。 Here's@echo off
ステートメントを削除してスクリプトを再実行すると、私の端末からの完全な出力の要点。
誰も私にこれがなぜ起こっているのか、私はそれを修正するために何ができるのか教えていただけますか?ありがとう。
編集:はちょうどこのにそれを変更:
for /f %%p in ('dir /b /s project.json') do (
set projectFile=%%p
dnu restore "%projectFile%"
dnu build "%projectFile%"
dnu pack "%projectFile%"
)
それでもエラーメッセージが今異なっているが、動作していないようです。 Here's新しい出力の要点。 %projectFile%
が空の文字列に設定されていることに注意してください。
に乏しいドキュメントを読んで、変数は '%'で囲まれているので、 '%のprojectFileの%'になります。また、 'for'ループで参照しているので、' setlocal enabledelayedexpansion'を使う必要があります。 –
@KenWhite 'for/f'ループにはありません... –
' for'ループでは、 '!'で参照され、 '!projectFile!'となります。私は私のコメントを編集していた。 :-)遅延拡張を有効にする必要もあります。 –