2016-01-13 33 views
-1

上使用下面的代碼,我能夠在一個目錄下創建文件夾列表 -批次 - 附加變量項的列表

Setlocal EnableDelayedExpansion 
set /p pattern=Enter Search Term: 
echo. 
dir /b /A:D %pattern%* 

例如,如果用戶輸入CON,結果可能是

- CON struction1

- CON struction2

- CON struction_Docs

我希望能夠將值附加到每個項目如。

1_Construction1

2_Construction_Docs

我是在想,我將不得不輸出I創建一個.txt的初步名單,然後讀取和可變附加到每一行修正?

的最終結果將是能夠選擇基於我們重視它的數量的項目之一,再有采取對項目進一步行動的用戶。

+1

上次我看到一個菜單系統編碼爲批處理腳本是在Windows 3.1之前。這當然是可能的,但你確定vbscript或powershell不會讓你更快,更容易維護解決方案嗎?我意識到這屬於「沒有幫助」的範疇,但我浪費了大量的時間試圖讓批處理腳本執行它們不是爲了構建的東西。 – christutty

+2

@christutty - 我發現,除非你操縱GUI或者使用不是整數或大於2^32的數字進行數學計算,否則批處理完全適合該任務。 – SomethingDark

+0

我只有批次的經驗,而且在這方面的經驗有限。從列表中選擇一個項目的用戶就像我計劃製作的項目一樣複雜,批處理的其餘部分將是諸如robocopy和樹之類的東西。但如果他們不太複雜,我願意接受其他解決方案! 感謝您的輸入 –

回答

2
dir /b /A:D %pattern%*|find /n /v "" 

將產生

[1] construction1
[2] construction2
[3] construction_Docs

dir /b /A:D %pattern%*|findstr /n /v ":" 

將產生

1:construction1
2:construction2
3:construction_Docs

那麼你可以嘗試

set /a max=0 
for /f "delims=:" %%a in ('dir /b /A:D %pattern%*^|findstr /n /v ":" 2^>nul') do set /a max=%%a 

這將設置max爲0,如果沒有找到或最大數量

  • ^告訴批次,所述管/>被命令的一部分被執行
  • 2> NUL抑制沒有匹配的情況下的錯誤消息發現

它當時的

一件簡單的事
if %max%==0 echo none found&goto askagain 
set /p "selection=Please choose [1..%max%] ? " 
for /f "tokens=1*delims=:" %%a in ('dir /b /A:D "%pattern%*"^|findstr /n /v ":" 2^>nul') do if "%%a"=="%selection%" set "dirselected=%%b"&goto found 
echo %selection% is invalid 
goto askagain 
:found 
echo %dirselected% selected. 

做一個完整的工作。

+0

優秀的答案,但我會添加解釋文本作爲評論,以便任何人試圖維護最終腳本有一些它的工作原理。恕我直言批處理腳本這個複雜的需要在彙編程序的同一級別進行評論。 – christutty

+0

這個工作起來,直到我嘗試並選擇其中一個選項 - 我收到錯誤「不是一個公認的命令」 - 我哪裏錯了? –

+0

我**認爲**我通過刪除代碼的第三行上的最後一個'do'命令並將%% b更改爲%%來實現它的功能 –

2

這個任務是實現比較簡單,如果你使用正確的工具,像一個數組:

@echo off 
setlocal EnableDelayedExpansion 

set /P "pattern=Enter Search Term: " 
echo/ 

rem Get the folders, store they in the array and show the menu 
set "num=0" 
for /D %%f in (%pattern%*) do (
    set /A num+=1 
    set "folder[!num!]=%%f" 
    echo !num!- %%f 
) 
if %num% equ 0 echo No folders found & goto :EOF 
echo/ 

:selectFolder 
set /P "num=Enter the desired folder: " 
echo/ 
if not defined folder[%num%] goto selectFolder 

set "item=!folder[%num%]!" 
echo Folder selected: %item% 

更詳細的信息在批處理文件陣列管理,見this post