ファイルがバッチファイルに存在するかどうかを確認する方法


186

これを行う.BATファイルを作成する必要があります。

  1. C:\myprogram\sync\data.handler存在する場合は終了します。
  2. もしはC:\myprogram\html\data.sql、出口には存在しません。
  3. ではC:\myprogram\sync\除くすべてのファイルとフォルダを削除(testtest3test2
  4. コピーC:\myprogram\html\data.sqlC:\myprogram\sync\
  5. オプションで他のバッチファイルを呼び出しますsync.bat myprogram.ini

Bash環境の場合は簡単でしたが、ファイルまたはフォルダーが存在するかどうか、およびファイルまたはフォルダーかどうかをテストする方法がわかりません。

回答:


289

IF EXISTを使用してファイルを確認できます。

IF EXIST "filename" (
  REM Do one thing
) ELSE (
  REM Do another thing
)

「else」が必要ない場合は、次のようにすることができます。

set __myVariable=
IF EXIST "C:\folder with space\myfile.txt" set __myVariable=C:\folder with space\myfile.txt
IF EXIST "C:\some other folder with space\myfile.txt" set __myVariable=C:\some other folder with space\myfile.txt
set __myVariable=

ファイルまたはフォルダを検索する実際の例を次に示します。

REM setup

echo "some text" > filename
mkdir "foldername"

REM finds file    

IF EXIST "filename" (
  ECHO file filename exists
) ELSE (
  ECHO file filename does not exist
)

REM does not find file

IF EXIST "filename2.txt" (
  ECHO file filename2.txt exists
) ELSE (
  ECHO file filename2.txt does not exist
)

REM folders must have a trailing backslash    

REM finds folder

IF EXIST "foldername\" (
  ECHO folder foldername exists
) ELSE (
  ECHO folder foldername does not exist
)

REM does not find folder

IF EXIST "filename\" (
  ECHO folder filename exists
) ELSE (
  ECHO folder filename does not exist
)

1
ファイル名でフルパスを確認するにはどうすればよいですか?パスにスペースが含まれている場合はボーナスポイント。OPが言ったように、BASHでは単純です。
Nick

2
@ニック:cmdあまりにも単純です-別の質問として尋ねてください-彼らはあまり費用がかかりません。3年以上経過した質問にさらに質問コメントを追加しても、多くの回答が得られる可能性は低いです(ただし、この正確な質問に対する回答については、最初にSOを確認してください。そうしないと、新しい質問が重複としてマークされます...)
Magoo 2014年

8
IF /?ヘルプファイルからの注意点: The ELSE clause must occur on the same line as the command after the IF.これは私を燃やしました。お役に立てば幸いです。
funkymushroom 14

1
注意:IF、EXIST、ELSE、REM、DELなどはすべて小文字でも機能します。
Terra Ashley

1
ファイルが存在しないかどうかを確認するには、を使用しますIf Not Exist "%FilePath% ( command )。なお、バットの使用中括弧(の代わりに中括弧の{
transang

11

IF /?と入力します。ifについてのヘルプを得るには、IF EXISTの使用方法を明確に説明しています。

一部のフォルダーを除く完全なツリーを削除するには、この質問の回答を参照してください:1つを除くフォルダー内のすべてを削除するWindowsバッチスクリプト

最後に、コピーとは、COPYの呼び出しと別のbatファイルの呼び出しを次のように行うことを意味します。

MYOTHERBATFILE.BAT sync.bat myprogram.ini

10

次に、ファイルが存在する場合と存在しない場合のコマンドの実行方法の良い例を示します。

if exist C:\myprogram\sync\data.handler echo Now Exiting && Exit
if not exist C:\myprogram\html\data.sql Exit

これら3つのファイルを取得して、一時的な場所に配置します。フォルダーを削除すると、これらの3つのファイルが復元されます。

xcopy "test" "C:\temp"
xcopy "test2" "C:\temp"
del C:\myprogram\sync\
xcopy "C:\temp" "test"
xcopy "C:\temp" "test2"
del "c:\temp"

XCOPYコマンドを使用します

xcopy "C:\myprogram\html\data.sql"  /c /d /h /e /i /y  "C:\myprogram\sync\"

その/c /d /h /e /i /y意味を説明します。

  /C           Continues copying even if errors occur.
  /D:m-d-y     Copies files changed on or after the specified date.
               If no date is given, copies only those files whose
               source time is newer than the destination time.
  /H           Copies hidden and system files also.
  /E           Copies directories and subdirectories, including empty ones.
               Same as /S /E. May be used to modify /T.
  /T           Creates directory structure, but does not copy files. Does not
               include empty directories or subdirectories. /T /E includes
  /I           If destination does not exist and copying more than one file,
               assumes that destination must be a directory.
  /Y           Suppresses prompting to confirm you want to overwrite an
               existing destination file.

`To see all the commands type`xcopy /? in cmd

オプションsync.bat myprogram.iniで他のバッチファイルを呼び出します。

どういう意味かわかりませんが、両方のファイルを開きたい場合は、次のようにファイルのパスを入力します。

Path/sync.bat
Path/myprogram.ini

Bash環境の場合は簡単でしたが、ファイルまたはフォルダーが存在するかどうか、およびファイルまたはフォルダーかどうかをテストする方法がわかりません。

バッチファイルを使用しています。先ほど、これを使用するには.batファイルを作成する必要があると述べました。

これを行う.BATファイルを作成する必要があります。


この答えは何ですか?
Avrumi Sherman、2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.