web-dev-qa-db-ja.com

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

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

  1. C:\myprogram\sync\data.handlerが存在する場合は終了します。
  2. C:\myprogram\html\data.sqlが存在しない場合は終了します。
  3. C:\myprogram\sync\で(testtest3およびtest2)以外のすべてのファイルとフォルダーを削除します
  4. C:\myprogram\html\data.sqlC:\myprogram\sync\にコピーする
  5. オプションsync.bat myprogram.iniを付けて他のバッチファイルを呼び出します。

それがBash環境にあったなら、それは私にとって簡単でした、しかし、私はファイルまたはフォルダーが存在するかどうか、そしてそれがファイルまたはフォルダーであるかどうかをテストする方法を知りません。

167
CuSS

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
)
253
stuartd

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

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ファイルを作成する必要があります。

11
Avrumi Sherman

IF /?と入力します。についての助けを得るために、それはIF EXISTの使い方を明確に説明しています。

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

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

MYOTHERBATFILE.BAT sync.bat myprogram.ini
11
Patrick