%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%2F%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
Windows コンソールで、ファイル/フォルダーが存在するかどうかを確認しようとしています。
EXIST
バッチでは使用できますが、コマンドラインでは使用できません。
C:\Users\WIN7PR~1>EXIST C:\Users
'EXIST' is not recognized as an internal or external command, operable program or batch file.
答え1
リソースがファイルの場合の解決策は、他の人が示しているように非常に簡単です。
C:\> IF EXIST C:\CONFIG.SYS ECHO C:\CONFIG.SYS exists.
残念ながら、上記はディレクトリには機能しません。EXIST 関数は、存在しないフォルダと存在するフォルダの両方に対して同じ結果を返します。幸いなことに、あまり知られていない回避策があります。
C:\> IF NOT EXIST C:\FOLDER\NUL ECHO C:\FOLDER missing.
C:\FOLDER missing.
C:\> MD C:\FOLDER
C:\> IF EXIST C:\FOLDER\NUL ECHO C:\FOLDER exists.
C:\FOLDER exists.
コマンド ステートメントへの追加などの構造をサポートするために、各ディレクトリに「NUL」という名前の一種の仮想ファイルが存在することがわかりました>NUL
。その存在を確認することは、ディレクトリの存在を確認することと同じです。
この動作は、Microsoft サポート技術情報の記事 (https://support.microsoft.com/ja-jp/kb/65994 より) であり、FreeDOS 1.1 および Windows 7 コマンド シェルでの動作を確認しました。
補足: KB 記事によると、この手法はドライブが存在するかどうかを確認するためにも使用できます。ただし、ドライブの存在を確認する場合は、注意点があります。
Abort, Retry, Fail?
ドライブがフォーマットされていない場合はエラーが発生します。この手法を使用してドライブの存在を確認することは、デバイス ドライバーの実装に依存し、必ずしも機能するとは限りません。
答え2
シンプルな
DIR C:\User
答え3
コマンドを使用するとtype
、テキスト ファイルを開かずにその内容が返され、ディレクトリの場合は「アクセスが拒否されました」というメッセージが返されます。
ファイルまたはディレクトリが利用できない場合は、「指定されたファイルが見つかりません」というメッセージが表示されます。
たとえば次のようになります。
C:\>type c:\temp
Access is denied.
C:\>type c:\example.txt
Some example content in a text file
C:\>type c:\doesnotexist
The system cannot find the file specified.
答え4
次のコードを使用できます:
<pre>
:init
SETLOCAL enabledelayedexpansion
GOTO make_dir
:make_dir
ECHO .
ECHO Checking if exists directory %out_path% ...
CD %out_path%
IF !ERRORLEVEL! GTR 0 (
ECHO Directory doesn't exist, creating...
MD %out_path%
GOTO make_dir
) ELSE (
ECHO Directory already exists.
)
:GOTO back_it_up
:back_it_up
::Procedure that makes an backup
GOTO done
:done
ECHO Finished
SETLOCAL
EXIT /B
</pre>