[前の記事]« 環境変数の文字列抜き出しで、開始位置と文字数を動的に指定したい
[次の記事]空(0バイト)のファイルを作成しようとしたら「アクセスが拒否されました」のメッセージが »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「COPY,XCOPY…ファイルやディスクの複写・連結・バックアップ」索引へ
▲カテゴリー「ERRORLEVEL」索引へ
▲カテゴリー「遅延環境変数の展開」索引へ

コピーが成功しても失敗しても同じERRORLEVELが返る

1087.
バッチ処理中のerrorlevel
2006年04月16日(日) 11時16分
duck
●DOS/Windowsのバージョン↓
Microsoft Windows XP [Version 5.1.2600]

バッチを使って既存ファイルをリネームし、他のPCにある同名ファイルをコピーしたく思ってます。
以下のようなバッチを作成し実行しようと思ってるのですが失敗しても成功と出てきてしまいます。

FOR /F %%A IN (D:\temp.txt) do (

rename \\%%A\d$\Temp\test.txt test.txt.bak
if %errorlevel%==0 (

copy d:\test.txt \\%%A\d$\Temp\
if %errorlevel%==0 (
echo %%A,はコピーに成功しました。>> d:\Temp\evidence.txt
) else (
echo %%A,はコピーに失敗しました。>> d:\Temp\evidence.txt
)

) else (
echo %%A,は名前の変更に失敗しました。>> d:\Temp\evidence.txt
)
)

コマンドの途中を見ていると
rename失敗しているにも関わらず戻り値が0になっています。
コマンド単独で実施した場合は1等を返してくるのですがバッチ処理中では0になってしまいます。

どなたかお分かりになる方がいましたら教えてください。
宜しくお願い致します
1088.
Re:バッチ処理中のerrorlevel
2006年04月16日(日) 21時45分
YanaKen◆c0rnJ1Q=
duckさん こんにちは。

>以下のようなバッチを作成し実行しようと思ってるのですが失敗しても成功と出てきてしまいます。

 過去にもしばしば話題に出てきてますが、一連の処理を( )でくくった場合、その中で変動する可能性のある環境変数(%errorlevel%もその一種だと考えられる)を参照する場合、「遅延環境変数の展開」を有効にする必要があります。
 詳細は、set、setlocal、cmdのヘルプなどから情報を得てください。

 ご質問の場合でいえば、
FOR /F %%A IN (D:\temp.txt) do (
 ↑この do ( 以降は、あらかじめ%errorlevel% がその時点の値である定数 0 に置き換わった状態で実行されている、と考えられます。

 ただ、(確認したわけではないですが)環境変数文字列errorlevelではなく、数値としてのerrorlevelをそのまま参照するかたちであればこのようなややこしさは発生しないんではないかと思います。たとえば、

if errorlevel 1 (
rem errorlevel 1以上
echo %%A,はコピーに失敗しました。>> d:\Temp\evidence.txt
) else (
rem errorlevel 0
echo %%A,はコピーに成功しました。>> d:\Temp\evidence.txt
)
 ……のような形式に修正してみては。

YanaKen
1096.
Re:バッチ処理中のerrorlevel
2006年04月21日(金) 12時56分
duck
YanaKenさん

ありがとうございます。
ファイルが存在するかどうかを確認することよりに上手く起動しました。
ありがとうございました。

 
 


カテゴリー「COPY,XCOPY…ファイルやディスクの複写・連結・バックアップ」索引へ
カテゴリー「ERRORLEVEL」索引へ
カテゴリー「遅延環境変数の展開」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2006年04月16日 11:51に投稿されたエントリーのページです。

ひとつ前の投稿は「環境変数の文字列抜き出しで、開始位置と文字数を動的に指定したい」です。

次の投稿は「空(0バイト)のファイルを作成しようとしたら「アクセスが拒否されました」のメッセージが」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート