2016-09-20 85 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

我覺得這個遞歸解決方案工作得很好;你可以把它稱呼WCDIR.bat

@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 

編輯:我在過去for /F命令固定一個小bug。

例如,WCDIR.bat C:\Windows\Sys*\find*.exe命令在我的Windows 8.1的64位計算機的輸出是:

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

您可以用命令Where /?

WHERE命令嘗試大致等同於UNIX「的」命令。默認情況下,搜索在當前目錄和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

我嘗試過'where/R C:\ Windows \ Sys * find * .exe',並得到類似「ERROR:invalid directory」的錯誤信息。 Windows 8.1在這裏。爲你工作這個命令? – Aacini