質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Windows

    1705questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • バッチファイル

    281questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Windowsバッチでファイルの有無を判定させたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,350

teketeke

score 41

前提・実現したいこと

以下にある、LINUXのものと同じことを実装したいです。

test1.txtとtest2.txtが無ければ、"exit 0"で終了し、
どちらか片方でもあれば、test1.txt、test2.txtを削除し、
"exit 1"を返すといったバッチを作成したいです。

LINUXでは、以下のようなスクリプトで実装しています。

if ([ ! -e /tmp/test1.txt ] && [ ! -e /tmp/test2.txt ] ); then
    exit 0
else
    if [ -e /tmp/test1.txt ]; then
        rm -f /tmp/test1.txt
    fi
    if [ -e /tmp/test2.txt ]; then
        rm -f /tmp/test2.txt
    fi
    exit 1
fi

発生している問題・エラーメッセージ

LINUXのものと同じことを実装したいのですが、
調べたところ、Windowsのバッチでは、IF文でAND ORが使えないらしかったので、
以下のようなバッチで実装できないかを検証しています。

IF文が正しく判断されているかを確認する為、
echoでファイルを作成させるようにしたのですが、
バッチファイルを実行しても、ファイルが作成されません。
コマンドプロンプトにドロップして実行しても、ファイルが作成されませんでした。

"NOT Exist"を"Exist"にしても同じでした。

ソースコード

SET FILE_FLAG_A=0
IF NOT Exist C:\test1.txt (
SET FILE_FLAG_A=1
)

IF %FILE_FLAG_A% == "1" (
echo "A" > C:\A.txt
)

SET FILE_FLAG_B=0
IF NOT Exist C:\test2.txt (
SET FILE_FLAG_B=1
)

IF %FILE_FLAG_B% == "1" (
echo "B" > C:\B.txt
)

補足情報(言語/FW/ツール等のバージョンなど)

WindowsServer2008R2

実装方法が不明な部分がありますが、以下のような処理で実現できるのではないかと考えています。

set フラグA=0※ファイルA存在フラグ
set フラグB=0※ファイルB存在フラグ
set フラグC=0※ファイルAとBが存在することを表すフラグ(数値)

if [ファイルAがある](
フラグA=1
フラグC+=1※計算方法が現地点不明
)

if [ファイルBがある](
フラグB=1
フラグC+=1※計算方法が現地点不明
)

if [ファイルC == 2](
del ファイルA
del ファイルB

exit 1
)

if [ファイルA == 1](
del ファイルA
exit 1
)

if [ファイルB == 1](
del ファイルB
exit 1
)

exit 0
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

1"1"は異なりますので、IFの条件が成立しません。
Unixのシェルと違い、Windowsでは"はそのままコマンドに渡されます。

なお、IFでAND相当は出来るので、もとのシェルスクリプトはこう書けます。

if not exist \tmp\test1.txt if not exist \tmp\test2.txt exit /b 0
if exist \tmp\test1.txt del \tmp\test1.txt
if exist \tmp\test2.txt del \tmp\test2.txt
exit /b 1

なお、最初のシェルスクリプトの1行目は普通はこう書きます。

if [ ! -e /tmp/test1.txt -a ! -e /tmp/test2.txt ] ; then

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/13 22:48

    otn様
    回答ありがとうございます。

    >Unixのシェルと違い、Windowsでは"はそのままコマンドに渡されます。
    >なお、IFでAND相当は出来るので、もとのシェルスクリプトはこう書けます。
    なるほど、知りませんでした。
    ”ANDに相当するものがない=AND条件が使えない”と思っていたのですが、AND相当のことができるのですね。

    また回答頂きました内容で動作が問題無いようです。
    大変助かりました。

    ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • Windows

    1705questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • バッチファイル

    281questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。