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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Windows

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

バッチファイル

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

Q&A

解決済

1回答

11055閲覧

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

teketeke

総合スコア46

Windows

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

バッチファイル

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

0グッド

0クリップ

投稿2016/01/13 12:21

編集2016/01/13 12:37

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

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

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

bash

1if ([ ! -e /tmp/test1.txt ] && [ ! -e /tmp/test2.txt ] ); then 2 exit 0 3else 4 if [ -e /tmp/test1.txt ]; then 5 rm -f /tmp/test1.txt 6 fi 7 if [ -e /tmp/test2.txt ]; then 8 rm -f /tmp/test2.txt 9 fi 10 exit 1 11fi

###発生している問題・エラーメッセージ
LINUXのものと同じことを実装したいのですが、
調べたところ、Windowsのバッチでは、IF文でAND ORが使えないらしかったので、
以下のようなバッチで実装できないかを検証しています。

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

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

###ソースコード

dos

1SET FILE_FLAG_A=0 2IF NOT Exist C:\test1.txt ( 3SET FILE_FLAG_A=1 4) 5 6IF %FILE_FLAG_A% == "1" ( 7echo "A" > C:\A.txt 8) 9 10SET FILE_FLAG_B=0 11IF NOT Exist C:\test2.txt ( 12SET FILE_FLAG_B=1 13) 14 15IF %FILE_FLAG_B% == "1" ( 16echo "B" > C:\B.txt 17)

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

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

dos

1set フラグA=0※ファイルA存在フラグ 2set フラグB=0※ファイルB存在フラグ 3set フラグC=0※ファイルAとBが存在することを表すフラグ(数値) 4 5if [ファイルAがある]( 6フラグA=1 7フラグC+=1※計算方法が現地点不明 8) 9 10if [ファイルBがある]( 11フラグB=1 12フラグC+=1※計算方法が現地点不明 13) 14 15if [ファイルC == 2]( 16del ファイルA 17del ファイルB 18 19exit 1 20) 21 22if [ファイルA == 1]( 23del ファイルA 24exit 1 25) 26 27if [ファイルB == 1]( 28del ファイルB 29exit 1 30) 31 32exit 0 33

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

DOS

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

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

bash

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

投稿2016/01/13 12:40

otn

総合スコア84380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teketeke

2016/01/13 13:48

otn様 回答ありがとうございます。 >Unixのシェルと違い、Windowsでは"はそのままコマンドに渡されます。 >なお、IFでAND相当は出来るので、もとのシェルスクリプトはこう書けます。 なるほど、知りませんでした。 ”ANDに相当するものがない=AND条件が使えない”と思っていたのですが、AND相当のことができるのですね。 また回答頂きました内容で動作が問題無いようです。 大変助かりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問