2012-04-09 10 views
0

たとえば、ファイル名を指定して、スクリプトでコンピュータを検索して変数へのパス。擬似コールは次のとおりです。完全なパス情報を含むドライブ、:Windowsの.batファイルで、任意のファイルへのパスを見つけて、これを変数に書き込むにはどうすればいいですか?

設定pathToMyFile = SomeSearchFunction(myFileToSearchFor.ext)

おかげ

+0

1つのファイルで簡単に実行できます。複数のファイルが見つかったら何をしたいですか? – RobW

答えて

2

dir /b /s "c:\myFileToSearchFor.ext"は、すべてのC内のファイルののoccuranceが一覧表示されます。

ファイルは複数の場所に存在する可能性があります。

このバッチコマンドは、最後に見つかった場所に変数を設定します:

for /f "delims=" %%F in ('dir /b /s "c:\myFileToSearchFor.ext"') do set "pathToMyFile=%%~dpF" 

このバッチスクリプトは、最初に見つかった場所に変数を設定します:

for /f "delims=" %%F in ('dir /b /s "c:\myFileToSearchFor.ext"') do (
    set "pathToMyFile=%%~dpF" 
    goto :foundIt 
) 
:foundIt 
0

は機能/プログラムはありません私が知っていることはこれを実行する。効率が必要な場合は、すべてのディレクトリからファンシーツリー検索を行うプログラムを作成できます。しかし、私はバッチで解決策を見つけました!バッチファイルの最初の引数として発見されるファイルを渡す

@echo off
for /r "C:\somebasepath" %%i in (*) do (
if "%%~nxi" EQU "%1" (
echo %%i
break
)
)

。しかし、深いディレクトリにある場合、これは非常に遅いです。

+0

(1) 'break'を' goto:eof'またはそれに類するものに変更する(2) 'if'コマンドの'/i'オプションを使うべきです。 –

+0

また、ベースパスをパラメータ化することもできます。あなたは 'for/r"%〜dp1 "%% a in(*)'を使用し、 'if/i %%〜nxa ==%〜nx1'でチェックすることができます –

関連する問題