2

.batファイルがあります。次のように見えます

....many commands1
ftp -i -s:copy.txt
...many commands2

copy.txtには次のコマンドが含まれています

open ...
login
password
get file
bye

.batファイルを実行すると、次に機能します

many commands1
ftp commands

しかし、多くのコマンド2はまだ実行されていません。

4

1 に答える 1

4

コマンドの1つが、コマンドを使用せずにcommand2バッチファイルを呼び出している(起動している)可能性があるようCALLです。(下部には、使用する場合と使用しない場合の結果を説明する2つのフローチャートがありCALLます。)**を使用する場合と使用しない場合の結果を参照してくださいCALL


私の最初の勘が正しくない場合は、バッチファイルをデバッグするための手順を開始する必要があります。

ステートメントをコメントアウトし、バッチファイルにいくつかの@ECHO OFFステートメントを入れます。これは、エラーを見つけるのに役立ちます。また、コードでバッチファイルを実行する場合は、このコマンドを使用する必要があります。edバッチファイルの実行が終了した後も、ingバッチファイルの実行を続行してください。また、ステートメントを含むバッチファイルがある場合は、制御がingファイルに戻った後も引き続き適用されることに注意してください。例えば:PAUSEECHOCALLCALLCALLCALLECHO OFFECHO OFFCALL

:: For debugging porpuses we leave `ECHO` in it's default `ON` state
REM @echo off

:: Execute your leading commands:
commands1

:: If you prefer, because you know that your problem comes after this point;
:: You can, if you want, leave the leading `ECHO OFF` command alone, and
:: instead, put an `ECHO ON` statement here:
echo on

ftp -i -s:copy.txt
ECHO Back from FTPing...
pause

:: Calling command2.1.exe
command2.1.exe
echo Back from command2.1.exe
pause

:: Calling command2.2.bat
CALL command2.2.bat

:: Since Command2.2.bat contains an ECHO OFF statement
:: we'll turn `ECHO` back on again for debugging purposes.
ECHO ON

echo Back from command2.2.bat
pause

を使用する場合と使用しない場合の結果CALL

これらの2つのバッチファイルを想定します。

RUN.BAT

@ECHO OFF
ECHO Starting: RUN.BAT
(Misc commands)

:: 'Calling' SECOND.BAT without useing `CALL`
SECOND.BATCH

:: Back from SECOND.BAT
ECHO Back from second.bat

SECOND.BAT

@echo off
ECHO Running: SECOND.BAT

CALLステートメントなしの実行フローは、次のように移動します。

C:\> RUN.BAT<kbd>ENTER</kbd>
      |
     \|/
      v
@echo off
echo Running
(misc commands)
      |
     \|/
      v
SECOND.BAT   ---->   @echo off
                     echo Running Seond.bat
                     (misc commands)
                      |
                     \|/
                      v
                     END

ただし、ファイルSECOND.BATの行をに変更すると、実行のフローは次のようになります。RUN.BATCALL SECOND.BAT

C:\> RUN.BAT<kbd>ENTER</kbd>
      |
     \|/
      v
@echo off
echo Running
(misc commands)
      |
     \|/
      v
SECOND.BAT   ---->   @echo off
                     echo Running Seond.bat
                     (misc commands)
                            |
                           \|/
                            v
:: Back from SECOND.BAT  <--+
      |
     \|/
      v
ECHO Back from second.bat
      |
     \|/
      v
     END
于 2012-09-18T13:28:44.067 に答える