2014-01-28 3 views
2

Издание:Наведение пользователя выбрать каталог, в пакетном файле

Я пытаюсь иметь пользователь выбрать папку, чтобы выбрать из в указанной директории, а затем добавить эту папку на адрес для того, чтобы выполнить программу в этом каталоге ,

Например, !acct! - это переменная, которую я использую, чтобы спросить конечного пользователя, к какой учетной записи они хотят получить доступ. Эта учетная запись является начальной или корневой папкой для всех других папок. Структура папок остается такой же для всех учетных записей EXCEPT для второго токена папки. i.e) 123456789\*\program\setup\

* - это папка, в которой существует несколько папок, на которые я хотел бы выбрать конечный пользователь.

После того как я выбран, я хотел бы, чтобы скрипт добавил этот каталог, чтобы программа могла быть выполнена.

Я думал, установив переменную acctDir=C:\Users\jdoe\Desktop\!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 . . . 
Смежные вопросы