8

ファイル名をそれぞれ別の行にリストしたファイルがあり、それぞれが特定のディレクトリに存在するかどうかをテストしたいと考えています。たとえば、ファイルのいくつかのサンプル行は次のようになります。

mshta.dll
foobar.dll
somethingelse.dll

興味のあるディレクトリはX:\Windows\System32\であるため、次のファイルが存在するかどうかを確認したい:

X:\Windows\System32\mshta.dll
X:\Windows\System32\foobar.dll
X:\Windows\System32\somethingelse.dll

Windows コマンド プロンプトを使用してこれを行うにはどうすればよいですか? また、(好奇心から) bash や別の Unix シェルを使用してこれを行うにはどうすればよいでしょうか?

4

6 に答える 6

10

バッシュ:

while read f; do 
    [ -f "$f" ] && echo "$f" exists
done < file.txt
于 2008-09-29T21:37:13.377 に答える
10

cmd.exeでは、FOR / F%変数 IN( ファイル名 )DO コマンドで必要な情報が得られます。これにより、ファイル名の内容(および複数のファイル名である可能性があります)が一度に1行ずつ読み取られ、その行が%variableに配置されます(多かれ少なかれ、コマンドプロンプトでHELP FORを実行します)。誰もコマンドスクリプトを提供しない場合は、試行します。

編集:要求されたものを実行するcmd.exeスクリプトの私の試み:

@echo off
rem first arg is the file containing filenames
rem second arg is the target directory

FOR /F %%f IN (%1) DO IF EXIST %2\%%f ECHO %%f exists in %2

上記のスクリプトはスクリプトでなければならないことに注意してください。.cmdまたは.batファイルのFORループは、奇妙な理由で、変数の前に2つのパーセント記号が必要です。

さて、bash | ash | dash | sh | kshで動作するスクリプトの場合:

filename="${1:-please specify filename containing filenames}"
directory="${2:-please specify directory to check}
for fn in `cat "$filename"`
do
    [ -f "$directory"/"$fn" ] && echo "$fn" exists in "$directory"
done
于 2008-09-29T21:38:32.597 に答える
2
for /f %i in (files.txt) do @if exist "%i" (@echo Present: %i) else (@echo Missing: %i)
于 2008-09-30T17:26:23.097 に答える
1

Windowsの場合:


type file.txt >NUL 2>NUL
if ERRORLEVEL 1 then echo "file doesn't exist"

(これはそれを行うための最良の方法ではないかもしれません;それは私が知っている方法です;も参照してくださいhttp://blogs.msdn.com/oldnewthing/archive/2008/09/26/8965755.aspx

Bashの場合:


if ( test -e file.txt ); then echo "file exists"; fi
于 2008-09-29T21:34:25.287 に答える
1

ただし、Win32と* nixの両方でデフォルトのファイルシステムを使用すると、操作のアトミック性を保証する方法がないことに注意してください。つまり、ファイルA、B、C、その他のプロセスまたはスレッドの存在を確認する場合です。ファイルAを渡した後、BとCを探しているときにファイルAを削除した可能性があります。

トランザクションNTFSなどのファイルシステムは、この制限を克服できます。

于 2008-09-29T21:38:22.657 に答える
1

上記のソリューションのほとんどに、1 つの小さなコメントを追加したいと思います。特定のファイルが存在するかどうかを実際にテストしているわけではありません。彼らは、ファイルが存在するかどうか、およびあなたがそれにアクセスできるかどうかを確認しています。アクセス許可のないディレクトリにファイルが存在する可能性は十分にあります。その場合、ファイルが存在していても、そのファイルを表示することはできません。

于 2008-09-29T22:45:41.873 に答える