2016-09-20 7 views
2

ファイルのパスと見つかったすべてのファイルをユーザーに確認するスクリプトを作成します。ファイルパスにはワイルドカードを含めることができます。 thisと似たようなものです。しかし、それのバッチスクリプトのバージョン。たとえば:ワイルドカードパスでファイルを検索する

C:\Somewhere\user*\app\version-*.*\start.exe 

ファイルは次のように配置されることがあります

C:\Somewhere\user345\app\version-1.0\start.exe 
C:\Somewhere\user898\app\version-1.2\start.exe 
C:\Somewhere\user898\app\version-1.3\start.exe 

私はFORを使用しようとFORが途中でワイルドカードをサポートしていないので、それはそんなに難しく予想以上であることが判明しますパスの。
これらのファイルを一覧表示する方法はありますか? (たぶんforを使用せずに?)

+0

あなたが提供した例は、より具体的にしたいことがあります。あなたは見つかったすべてのファイルをリストすることを話していますが、コンピュータを見ずにstart.exeと呼ばれることがあります。あなたが提供した道などは正しいのですか、または後であなた自身で変更することを希望する答えの目的のためにそれらを作っただけですか? – Compo

+0

サンプル@Compoのどの部分ですか?はい、私はそれらを作った – wthe22

+0

関連[パスのワイルドカードでフォルダを作成するバッチファイル](http://stackoverflow.com/q/31672436) – aschipfl

答えて

2

私は、この再帰的な解決策はかなりうまく機能だと思います。

@echo off 
setlocal 

if "%~1" neq "" set "next=%~1" & goto next 
echo Show files selected by several wild-cards 
echo/ 
echo WCDIR wildcardPath 
echo/ 
echo Each folder in the path may contain wild-cards 
echo the last part must be a file wild-card 
goto :EOF 

:next 
for /F "tokens=1* delims=\" %%a in ("%next%") do set "this=%%a" & set "next=%%b" 
if defined next (
    for /D %%a in ("%this::=:\%") do (
     setlocal 
     cd /D "%%~a" 2>NUL 
     if not errorlevel 1 call :next 
     endlocal 
    ) 
) else (
    for /F "delims=" %%a in ('dir /B /A:-D "%this%" 2^>NUL') do echo %%~Fa 
) 
exit /B 

EDIT::私は最後のfor /Fコマンドで、小さなバグを修正あなたはWCDIR.batそれを指定することができます。例えば

、私のWindows 8.1 64ビットコンピュータでWCDIR.bat C:\Windows\Sys*\find*.exeコマンドの出力は次のようになります。

C:\Windows\System32\find.exe 
C:\Windows\System32\findstr.exe 
C:\Windows\SysWOW64\find.exe 
C:\Windows\SysWOW64\findstr.exe 
0

あなたはWHEREコマンドは「は」コマンドUNIXとほぼ同等であるコマンドを使用してWhere /?

を試すことができます。デフォルトでは、検索は現在のディレクトリとPATHで行われます。

@echo off 
    Where /R "%programfiles%" *winrar.exe 
    pause 

@echo off 
:: Example d'input 
set UserInput=*drive* 

:: building the Pattern 
set cmd=%Userinput%.exe 

:: storage Where.exe command in a macro, the execution will be faster 
set whereCmd=where.exe /r c:\windows\ %cmd% 

:: execution of macro and output formatting 
for /f %%a in ('%whereCmd%') do echo %%~nxa --^> %%a 
pause 
+0

これは動作しません。/Rスイッチに指定されたパスには、ワイルドカードは使用できません。 – Aacini

+0

@AaciniはWindows 7で動作し、その動作は私のために); – Hackoo

+0

'/ R C:\ Windows \ Sys * find * .exe'を試したところ、" ERROR:invalid directory "のようなものがありました。 Windows 8.1はこちら。あなたのためにこのコマンドを実行しますか? – Aacini