3

次のバッチ スクリプトを作成しました。このスクリプトは、別のバッチ スクリプトをディレクトリ上で実行するか、フラグを追加してディレクトリ ツリー上で実行し、次に別のドライブ (Z:) 上の同等のディレクトリまたはディレクトリ ツリー上で実行します。どのオプションを選択しても、「指定されたパスが見つかりません」というエラーが出力されます。エラーが発生しても、1つのディレクトリだけで実行すると、想定どおりに実行されます。ディレクトリ ツリーでは正常に動作しません。@echo off なしで実行して、失敗した場所を理解しようとしましたが、成功しませんでした。変更しようとしているディレクトリは存在します。

@echo off
set origdir=%CD%
if X%~f1==X (
echo Please input a directory.
goto done
)

chdir /d %~f1
for %%X in (myotherscript.bat) do (set FOUND=%%~$PATH:X)
if not defined FOUND (
    echo myotherscript is not in your PATH
    )
if X%2==X/R (
goto recursive
) else ( goto single )

 :recursive     
for /d /r %%G in (.) do call myotherscript
echo Z:%~p1
chdir /d "Z:%~p1"
for /d /r %%G in (.) do call myotherscript
goto ended

:single
call myotherscript
echo Z:%~p1
chdir /d "Z:%~p1"
call myotherscript
goto ended

:ended
chdir /d origdir
goto done

:done
pause

ここに「myotherscript」があります。はい、パージは存在します。

@echo off
if exist "D:\path\to\purge.bat" (
    call purge
    for %%f in (*.log.*) do call :renameit "%%f"
    for %%f in (*.drw.*) do call :renameit "%%f"
    for %%f in (*.asm.*) do call :renameit "%%f"
    for %%f in (*.prt.*) do call :renameit "%%f"
    goto done ) else (
    echo Purge does not exist.
    goto done )

:renameit
ren %1 *.1

:done

どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

1

私にとっては、スクリプトの後半にあるように見えるexeが見つからないため、「システムは指定されたパスを見つけることができません」というメッセージが表示されました。DOS のパイプは、常に実行順にデータを出力するとは限らないようです。私は、スクリプト内の各「echo」コマンドからの出力が順番に出力される UNIX に慣れていたので、.bat ファイルにデバッグ出力を追加して、どの行が実行されたかを教えようとしました。

問題は、ファイルが見つからないというエラーが、echo コマンドが示すよりも早く出力ログ (および画面) で発生していたことです。したがって、WinXP cmd シェルが数歩先を行っていたのか、呼び出されたバット ファイルの起動中に実行ファイルを解析していたのか、それとも何なのかわかりません。

実際には、コールされたバット スクリプトから実行していた .exe へのパスが間違っていたことが判明しましたが、エコー デバッグ ステートメントにより、スクリプトの前の部分にいるように感じました。exeの前に正しいパスを追加すると、すべて機能しました

于 2013-07-03T18:15:21.997 に答える
1

この (非常に古い) 質問が再アクティブ化された理由がわかりません。しかし、それがあったので、これを閉じることができるかどうか見てみましょう.

ここには 2 つの問題があるようです。初め:

「指定されたパスが見つかりません」というエラーが出力されます。

これは、次の行の単純なタイプミスのように見えます。

chdir /d origdir

origdir「%」マークがない場合、これは、スクリプトが実行された元のディレクトリではなく、文字通り という名前のディレクトリに変更しようとしています。これは次のようになります。

chdir /d %origdir%

2番目の問題は次のとおりです。

エラーが発生しても、1つのディレクトリだけで実行すると、想定どおりに実行されます。ディレクトリ ツリーでは正常に動作しません。

推測では、これは次の行によるものです。

if X%2==X/R

"IF" は大文字と小文字を区別します。を使用してこれを実行しようとすると/r、再帰の要求が表示されず、常に が実行されsingleます。

于 2018-04-06T05:37:22.073 に答える