2014-01-28 39 views
2

問題:提示用戶在批處理文件中選擇目錄

我試圖讓用戶選擇的指定目錄內選擇哪個文件夾,然後將該文件夾添加到地址,以便在該目錄中執行程序。

例如,!acct!是我用來詢問最終用戶想要訪問哪個帳戶的變量。此帳戶是所有其他文件夾的開始或根文件夾。除了文件夾的第二個標記之外,所有帳戶的文件夾結構都保持不變。即123456789\*\program\setup\

*是我想讓最終用戶選擇的多個文件夾存在的文件夾。

一旦選擇,我想腳本添加該目錄,以便程序可以執行。

我想通過設置變量acctDir=C:\Users\jdoe\Desktop\!acct!\將允許我補充的ACCT數根目錄,然後運行FOR循環,讓我在一組使用通配符for /d %%i in (!acctdir!*media1\setup) do (start !app!)

任何幫助將是不勝感激!

@echo off 
setlocal enabledelayedexpansion 

:beginning 
echo. 
echo. 
echo =========================================================== 
echo Starting on !date! !time! on !Computername! 
echo =========================================================== 
echo. 

goto :main 


:main 
setlocal 

    set /P acct=Please type the 9 digit account number you would like to restore: 
    set acctDir=C:\Users\jdoe\Desktop\!acct!\ 
    set app=setup.exe /cd 
    set log=c:\logs.txt 


    echo. Starting on !date! !time! on !Computername! >> !log! 
    echo. 
    echo The account number you selected is: !acct! 
    echo. 

    goto :user 

:user 

    set /p answer=Is this correct (Y/N)? 
    echo. 

    if /i !answer!==y goto :yes (
    ) else ( 
     echo. 
     echo Ok. Let's try again^^! 
     echo. 
     Pause 
     cls 
     goto :beginning 
     ) 
    ) 

:yes 

    for /d %%i in (!acctdir!*media1\setup) do (
     start !app! 
    ) 

endlocal 
goto :eof 
+0

來自社會任何幫助嗎? – mjaestewart

+0

目前在示例代碼中沒有提供這樣的內容,對嗎? – unclemeat

+0

正確,我只是試圖完成這個劇本。我想我95%在那裏。我只是想念一些東西。 – mjaestewart

回答

2

你可以嘗試像以下:

set c=0 
For /f %%a in ('dir !acctDir! /B /A D') do (
    set /a c+=1 
    echo !c! %%a 
    set dir!c!=%%a 
) 

echo. 
set /p uin="Select a directory [1-!c!]: " 
set udir=!dir%uin%! 

echo Selected - %udir% 

此遍歷的!acctDir!目錄列表,並提示用戶根據分配給它的編號來選擇一個目錄。

!acctDir!\%udir%將成爲目錄的位置。

+0

GENIUS!這對我有利。感謝一羣人! – mjaestewart

+0

是否有可能讓我通讀代碼並向我解釋這個邏輯是如何工作的?它看起來像你正在使用動態變量。 – mjaestewart

+0

請仔細閱讀循環的工作方式,特別是使用/ f開關時 - %% a是一個動態變量,我的代碼中的for循環通過dir命令的輸出循環,這將成爲'!acctDir中的所有目錄!'。變量c是一個計數器,因此每個迭代dir1 .. dir2 .. dir3 ..等將被設置爲'!acctDir!'中的每個目錄名稱。 – unclemeat

0

偉大的東西,但我發現櫃檯邏輯不工作,直到你補充一點: SETLOCAL ENABLEDELAYEDEXPANSION

0

在延長一下原來的海報問:

所以,如果我想用這選擇一個目錄,然後將該目錄的內容複製到另一個位置,我該怎麼做?

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
set i=0 
For /f %%a in ('dir I:\AM_Configs-backups\ /B /A /D') do (
set /a i+=1 
echo !i! %%a 
set dir!i!=%%a 
) 

echo. 
set /p uin="Select a directory [1-!i!]: " 
set udir=!dir%uin%! 

echo Selected - %udir% 
md c:\test2 
copy %udir% c:\test2 
@PAUSE 

我不斷收到這樣的:

Select a directory [1-29]: 27 
Selected - 180126_053327 
The system cannot find the file specified. 
Press any key to continue . . . 
相關問題