• ベストアンサー

MS-DOSのBATファイルでのDELについて。

早速質問させていただきます。 <内容> BATファイルでdelコマンドを使っているのですが、もしファイルが無い時にDELコマンドを使用すると、ERRORLEVELで0以外の値が帰ってきます。 そのため条件文でファイルが存在するなら、DELを実行しないというようにしたいのですが、DOS上にあるファイル名を見つけることは出来るのでしょうか? <ソース> if ここにファイルがあるか無いかの条件文を記入したい。 del D:\a.txt if NOT %ERRORLEVEL% == 0 GOTO 200

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> <ソース> > if ここにファイルがあるか無いかの条件文を記入したい。 > del D:\a.txt > if NOT %ERRORLEVEL% == 0 GOTO 200 IF EXIST d:\a.txt del d:\a.txt IF NOT %ERRORLEVEL% == 0 GOTO 200 という感じでしょうか。 # DOS のバッチなんて久しぶりなので、自信はありません (^^;

poposan
質問者

お礼

ありがとうございます。 MS-DOSは古いので、結構わすれているし・・・・ たすかりました。

関連するQ&A

  • BATのIF文について質問

    @echo off cls set LOGFILE=C:\%COMPUTERNAME%.log find C:\temp\setting.txt "SERVER01" /I if %ERRORLEVEL% == 1 GOTO END if %ERRORLEVEL% == 0 ( set MESSAGE=SEVER01の環境です echo %MESSAGE% echo %MESSAGE% >> %LOGFILE% GOTO SET1 ) :SET1 echo テスト >> %LOGFILE% :END こんな簡単なBATを作成してみましたがERRORLEVELが0の時処理されません (「SEVER01の環境です」がLOGに書き込まれません) (もちろんsetting.txtには「SERVER01」の文字が入ってます) (FINDのあと、「echo %errorlevel」を記述して0にもなっているのですが) IFの構文として間違っていますか?どなたかご教授ください。 OSはWindowsXP SP3 64Bitです。

  • batファイルについて

    コマンドプロンプト(batファイル)で同一のフォルダにある 一定の条件のファイル(内容はテキストファイル)を一つのファイルにまとめる場合 以下のコマンドで出来ます TYPE *2015-04* > ../201504.txt サブフォルダに格納されている同条件の多数のファイルを一つにまとめる場合 どのような内容にすればよいでしょうか?

  • 終了コード errorlevel の考え方について

    こんばんは。 OSはWindowsXP Proを使っています。 テキストファイルに書いてある値を 終了コードにするバッチファイルを作成しました。 以下の2ファイルを同じディレクトリに保存します。 test.txt ┌--------┐   1 └--------┘ test.bat ┌---------------------------------------┐   @echo off   find "0" test.txt   if not errorlevel 1 exit /b 0   find "1" test.txt   if not errorlevel 1 exit /b 1   echo テキストは0~1の値ではありません。   exit /b 2 └---------------------------------------┘ この状態で次のように実行します (1) C:\>test.bat ---------- TEST.TXT ---------- TEST.TXT 1 (2) C:\>echo %errorlevel% 1 (3) C:\>set errorlevel=0 (4) C:\>echo %errorlevel% 0 ※ここでtest.txtの中の数字を2にします。 (5) C:\>test.bat ---------- TEST.TXT ---------- TEST.TXT テキストは0~1の値ではありません。 (6) C:\>echo %errorlevel% 0 (7) C:\>set errorlevel= (8) C:\>echo %errorlevel% 2 となります。 (2)の結果から、(1)で実行した「exit /b 1」でerrorlevelに1が格納されることが判ります。 しかし、(6)の結果から、(3)で実行した「set errorlevel=0」が (5)で実行した「exit /b 2」より優先されていることが判ります。 しかし(7)でerrorlevelの値を消去したように思われますが、 (8)の結果から、(3)のセットを消去しつつ(5)で実行した「exit /b 2」を記憶しているように見えます。 この挙動について、どのように理解すれば良いのでしょうか。 また「exit /b ○」と「set errorlevel=○」でセットする違いについて教えて頂ければと思います。 お願いします。

  • バッチファイル(.bat)へWSH(.wsf)のエラーコードの返し方について

    はじめまして、kiwi88と申します。 バッチファイル(.bat)からwshスクリプト(.wsf)を呼び出すプログラムを作成しました。 そこで、wshスクリプトで実行されたエラーコードを呼び出しもとのバッチファイル(.bat)に返すことはできますでしょうか。 以下はバッチファイル(.bat)からwshスクリプト(.wsf)を呼び出す箇所のソースです。 ◆バッチファイル(test.bat)◆ ---------------------------------------- ~※処理内容省略~ cscript test.wsf //nologo //Job:wshscript > batch.log IF %ERRORLEVEL% NEQ 0 GOTO ERR exit :ERR set ret=%ERRORLEVEL% echo ****** [%:ERRORLEVEL=%ret%] ****** > err.txt exit %ret% ---------------------------------------- 以下はwshスクリプト(.wsf)のエラーコードを返す箇所のソースです。 ◆wshスクリプト(test.wsf)◆ ---------------------------------------- <job id = "wshscript"> <script language = "VBScript"> <![CDATA[ Option Explicit Function Main() ~※処理内容省略~ err = Err.Number Main = err End Function ]]> </script> </job> ---------------------------------------- 長くなってしまい、申し訳ありませんが、 ご教授願えますでしょうか。 宜しくお願いいたします。

  • batの検証依頼

    現在、batを作成中です。 ターゲットが巨大HDD(2TB)のディスクをbatで読み込んで処理中ですが 処理時間が10分程度必要なのでHDDで何度もトライ&エラーで処理するのは効率的ではありません。 しかも、処理を何度も行うとHDDに負担がかかる。 そこで、以下のコードで問題ないか コードを検証してもらえないでしょうか? 長い文字列(フルパス)が何度も出てきて読みにくいので変数で処理すべきでしょうが 自分のコード作成能力上間違いが少ない方法を選んでいます。 コメントをたくさん入れたのでどんな事をやりたいかはご理解願えると思いますが 不明な点は追加で説明いたします。 コードに不都合な点あれば、修正していただければ幸いです。 ’-------------------------------------------------------------------- REM ドライブレターの全フォルダー名のみを階層を含めて出力 REM ドライブ直下のファイル名(フルパス)の出力にも対応 REM ---------------------------------------------------- @echo off set /p D="ドライブを入力してください <例> x --> " cd /d %D%: REM サーチ先のドライブに移動して以下の作業を行う(書き出しもサーチ先になる) REM -- ドライブレターの全フォルダー名のみを階層を含めて出力 REM -- ドライブ直下のファイル名は出力しない dir /b /ad /s>temp1.txt REM -- /d ドライブ直下のファイル名のみを出力 (a-d ドライブ直下のファイル名のみ出力) dir /b /d >temp2.txt REM ファイル結合してコピー REM C:\UsersTAC_\Desktop\Mp3_MergeDrive\ ---> BATがあるフォルダを表す copy /Y temp2.txt + temp1.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt REM tempファイル削除 del /Q temp1.txt del /Q temp2.txt REM 出力ファイルをソート sort /o C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt rename C:\UsersTAC_\Desktop\Mp3_MergeDrive\temp.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\FileName_ListUp.txt REM ------------------------------------------------ REM Vol1, Vol2, Vol3という変数にボリューム名をセット set Vol1=K-N set Vol2=456 set Vol3=789 REM IDという変数を空でセット set ID= REM wmicコマンドでHDDのvolumenumberを取得し、findコマンドでVol1, Vol2, Vol3の値を検索 REM errorlevelの値に応じて、IDという変数にX, Y, Zの値をセット wmic logicaldisk get volumename | find "%Vol1%" if errorlevel 0 if not errorlevel 1 set ID=X wmic logicaldisk get volumename | find "%Vol2%" if errorlevel 0 if not errorlevel 1 set ID=Y wmic logicaldisk get volumename | find "%Vol3%" if errorlevel 0 if not errorlevel 1 set ID=Z REM 調査結果の表示、numの値で、serialnumberの中に一致するものがあったため、ID=X,Y,Zを表示。 REM serialnumberの中に一致するものがなかった場合、IDには何もセットせずに表示。 if defined ID ( echo Match found. ID=%ID% ) else ( echo No match found. ID=%ID% REM ドライブを加味したファイル名に変名 if defined ID rename C:\UsersTAC_\Desktop\Mp3_MergeDrive\FileName_ListUp.txt C:\UsersTAC_\Desktop\Mp3_MergeDrive\%ID% _FileName_ListUp.txt cls & echo "終了しました" & pause exit /b

  • コマンドの記号について

    batファイルのコマンドで或るサイトに載っていた文で気になったので質問させていただきます。 if %ERRORLEVEL%==0 ~(構文が続く) =を二つ続けているのはなぜでしょうか?

  • .batの実行に失敗する

    下記のコマンドを記載した.batファイルを作成し、実行しようとしております --battest.bat for /F "tokens=5 delims=," %i IN (1date_mgm.txt) DO @(if /i "%i"=="2" echo %i >2teteet.txt) --1date_mgm.txtの中身は以下の通りです file_1,20141025,0,0,0 file_2,20141025,2,2,2 これをコマンドプロンプトで実行すると、以下の結果となります。 (1)コマンドプロンプトに直接for文を記載  ⇒2teteet.txtが作成され、結果(2)が表示される (2)battest.batファイルを直接実行  ⇒2teteet.txtが作成されない   (管理者として実行を行っても同一の結果になります) (3)コマンドプロンプトにドラッグして実行  ⇒使い方が誤っていますと表示される。 これを常に2teteet.txtを作成させたい(正常な結果)のですが、 どのようにすればよいのでしょうか

  • batファイルについてです

    まずbatファイルというのは何なのでしょうか? 僕の認識だとコマンドプロンプトでできることをいちいち打ち込まずに機械的にするものというイメージなのですが大体あってるでしょうか? 次にbatファイルを利用してテキスト部分を操作することはできるでしょうか? 僕がやりたいのはたとえば 「playlist.m3u」の中身の \Documents and Settings\user\My Documents~\aa.mp3 \Documents and Settings\user\My Documents~\bb.mp3 \Documents and Settings\user\My Documents~\cc.mp3 「\Documents and Settings\user\My Documents~\」の部分を消した「playlist編集後.m3u」みたいなファイルを新たに作ったりとかすることです またそういったbatファイルの作成はbatファイルやコマンドプロンプトなどにあまり詳しくなくてもできるでしょうか? 一応僕はHTML、CSSくらいならあるていどできif文やfor文の使いかたは大体分かります

  • ORACLEでのexportのbatファイルの記述

    Windows2000ServerでOracle8.1.7を使用しています。 定期的にバックアップを取りたいため、exportを行う Batファイルを以下のように記述しましたが、うまくいきません。 ■batファイル----------------------- exp user/password parfile=EXP.TXT ----------------------------------- ■EXP.TXT owner=owner file=d:\back\exp.dmp log=d:\back\backup.log grants=y indexes=y ----------------------------------- このbatファイルを実行すると、文章ではうまく表現できないのですが 「exp user/password parfile=EXP.TXT」 の部分がDOS窓上で永遠に何行もスクロールしていっこうに コマンドが実行されません。 ただ「exp user/password parfile=EXP.TXT」と dos窓をあけて手入力するときちんと実行されます。 oracle7.3.4でも「exp73」で行えばこのbatファイルで きちんとexportが始まります。 ORACLEというよりはdosの知識かと思われますが どなたか、きちんと実行できる方法を教えてください。

  • 以下のtest.batでtest.txt中のダブルコーテションを削除し

    以下のtest.batでtest.txt中のダブルコーテションを削除したいと考えています。 【test.bat】 @echo off if "%1"=="" goto end set fname=%1 copy %fname% org >nul type nul >%fname% for /f %%a in ( org ) do (set line=%%a&& call :sub) del org goto end :sub set l=%line:"=% echo %l%>>%fname% goto :EOF :end 【test.txt】 "test1",101,1 "test2",201,2 "test3",301,3 dos窓からtest.bat test.txtを実行し、test.txt の内容を確認すると、 test1,101, という結果になります。 なぜ、最後の数字が削除されるのか? 2行目、3行目のデータが無くなるのは? というところがわかりません。 単純にダブルコーテーションを削除するにはどうしたらよいでしょうか? よろしくおねがいします。

専門家に質問してみよう