1

Windows を最後に使用してから何年も経っているので、作成しようとしている簡単なスクリプトについて助けが必要です。一言で言えば、ファイルのリストに基づいていくつかのファイルを作成するスクリプトを生成したいと考えています。私を苛立たせているのは、for ループの実行中、2 番目の要素が処理された後、コードが実際に実行される前に for ループ自体のコードが出力に表示されることです。さらに、ディレクトリを変更する最後のコマンドが実行されることはありません。その理由は、私が持っている goto:eof ステートメントにあると思います。誰かがスクリプトを適切に編集するのを手伝ってくれませんか?

スクリプトは次のとおりです。

@echo off
set "myroot=%cd%"
set "scriptsroot=%myroot%\public\javascripts"
set "cdstr=Changing directory"
echo.%cdstr%
cd %scriptsroot%
set "mainmsg=Generating bundles"
echo.%mainmsg%
set "corefiles="definitions resources representation something""
call:myConverter %corefiles%
set "cdstr=Changing directory"
echo.%cdstr%
cd %myroot%

:myConverter
set list=%~1
(for %%f in (%list%) do (
    echo.- Bundle for %%f
    browserify %%f.js -o %%fBundle.js
))
goto:eof
4

2 に答える 2

2

問題の最も可能性の高い原因は、browserify別のバッチ スクリプトです。スクリプトを CALL しないため、バッチ コンテキストは完了するとすぐに終了し、ECHO 状態はメイン スクリプトが実行される前の状態に戻ります。バッチ コンテキストが終了しても、FOR ループは完了まで実行を続け、ECHO 状態は ON になりました。バッチ コンテキストが終了したため、FOR ループが終了した後、残りのスクリプトは実行されません。

を使用する必要があり、ラベルの前にまたはcall browserifyも必要です。exit /bgoto :eof:myConverter

しかし、あなたのスクリプトは非常に複雑で、目的がないように見える変数を設定し、PUSHD/POPD を使用する代わりに現在の場所を変数に保存し、不要なサブルーチンを使用しています。

次のようにスクリプトをコーディングします。

@echo off
echo Changing directory
pushd public\javascripts
echo Generating bundles
for %%F in (definitions resources representation something) do (
  echo - Bundle for %%F
  call browserify %%F.js -o %%FBundle.js
)
echo Returning to original directory
popd

大きなスクリプトの複数の場所で変換を行う場合は、サブルーチンを作成して使用してください。listただし、変数を作成する必要はありません。%~1FOR ループで直接使用するだけです。

:myConverter
for %%F in (%~1) do (
  echo - Bundle for %%F
  call browserify %%F.js -o %%FBundle.js
)
exit /b
于 2014-01-25T14:14:15.993 に答える
1

これで問題は解決しませんが、スクリプトに論理エラーが見つかりました:

exit /bラベルの前に置く:myConverter

あなたが考えると、スクリプトは「最後の」行cd %myroot%で終了し、実際には「サブルーチン」を続行しますが、%~1現在は空であるため、実行しようとします

(for %%f in () do (
于 2014-01-25T13:51:31.907 に答える