2016-10-15 10 views
2

入力文字列と同じ名前のファイルのすべてのパスを見つけるバッチスクリプトを作成しようとしました。今すぐ発見された最初のファイルのみを見つけることができ、複数のファイルの場所をリストする方法を考えることはできません。私は経験が豊富ではなく、助けが必要です。同じファイル名で複数のファイルのパスを見つける

これはスクリプトコードの一部です:

:start 
    cls 
    echo Enter file name with extension: 
    set /p filename= 
    echo Searching... 

for %%a in (C D E F G H U W) do (
    for /f "tokens=*" %%b in ('dir /s /b "%%a:\%filename%"') do (
     set file=%%~nxb 
     set folderpath=%%~dpb\ 
     ::the path of the file without the filename included "C:\folder\folder\" 
     set fullpath=%%b 
     ::the path of the file with the filename included "C:\folder\folder\file" 
     goto break 
) 
) 
:notfound 
    cls 
    echo Enter file name with extension: 
    echo %filename% 
    echo File Not Found! 
    ping localhost -n 4 >nul 
    goto start 

:break 
    if "%folderpath:~-1%"=="\" set folderpath=%folderpath:~,-1% 
    cls 
    echo ? %filename% found 
    echo %fullpath1% 
    echo %fullpath2% 
    echo %fullpath3% 
    --- || --- 

私はスクリプトは、コンピュータを検索し、同じ名前を持つすべての遭遇ファイルをリストにしたいと私は違うの中にそれらのファイルのパスを置くことができるようにしたいです変数。 たとえば、readme.txtが入力の場合、その特定の名前(readme.txt)を持つすべてのファイルのすべてのパスのリストが必要です。そのあとで使用できるように、各パスに変数を設定します。

例:

input: 
readme.txt 

output: 
3 files found 
C:\folder\folder\readme.txt 
C:\folder\folder\folder\readme.txt 
D:\folder\readme.txt 

variables: 
path1 = C:\folder\folder\readme.txt 
path2 = C:\folder\folder\folder\readme.txt 
path3 = D:\folder\readme.txt 

答えて

0

ここでは、要求されたタスクを実行するであろう単一のスクリプトです。すべてのドライブで入力ファイル名が拡張子で検索され、見つかったすべてのファイルパスが変数に格納され、それらの変数が出力されます。私は、この応答の後で新しい変更のためのスクリプトを調整したり、それをあなたのスクリプトの残りの部分に統合する方法をアドバイスしたり、後で変更することをサポートしたりすることはありません。

@Echo Off 
Set/P "SearchTerm=Enter file name with extension: " 
Set "i=0" 
For /F "Skip=1" %%A In ('WMIC LogicalDisk Where^ 
    "DriveType>1 And DriveType!=5 And FreeSpace Is Not Null" Get DeviceID' 
    ) Do For %%B In (%%A) Do (For /F "Delims=" %%C In (
     'Where/F /R %%B\ "%SearchTerm%"2^>Nul') Do (Set/A i+=1 
      Call Set FullPath[%%i%%]=%%C)) 
If %i% LSS 1 (Echo= %SearchTerm% Not Found) Else (
    Echo= %SearchTerm% had %i% match(es^) 
    For /L %%A In (1,1,%i%) Do (
     Call Echo= %%%%FullPath[%%A]%%%% = %%FullPath[%%A]%%)) 
Timeout -1 1>Nul 

多くの場所を検索し、多くのファイルを変数に入れると、システムが負担となり、問題が発生する可能性があるので注意してください。

+0

ご意見ありがとうございます。私はあなたの助言を取って、同時に複数のファイルを検索するのではなく、バッチファイルを一度に検索してすべての機能で実行した後、別のファイルを検索してファイルがなくなるまでもう一度やり直した。 –

関連する問題