2015-07-05 3 views
0

Im пытается написать пакетный файл, который будет искать, зависит от того, какая версия на окнах работает пользователем, папка SIP и удаляет ее.Невозможно разрешить переменную в пакетном файле

Уже у меня есть что-то вроде этого:

@echo off 
setlocal enabledelayedexpansion 
set count=0 

cls 

echo ------------------------------- 
choice /c yn /t 1 /d n /M "Automode will start in 5 sec..." 

if "%ERRORLEVEL%" == "2" goto auto_no 
if "%ERRORLEVEL%" == "1" goto auto_yes 



::========== MANUAL ============================================================ 
::========== CHOICE ============================================================ 
:auto_no 
cls 

echo ------------------------------- 
echo Starting Manual Mode... 


:: ver | findstr /i "5\.1\." > nul 
:: IF %ERRORLEVEL% EQU 0 goto auto_no_winxp 

ver | findstr /i "10\.0\." > nul 
IF %ERRORLEVEL% EQU 0 goto auto_no_winxp 

ver | findstr /i "6\.0\." > nul 
IF %ERRORLEVEL% EQU 0 goto auto_no_winvista 
ver | findstr /i "6\.1\." > nul 
IF %ERRORLEVEL% EQU 0 goto auto_no_win7 
ver | findstr /i "6\.3\." > nul 
IF %ERRORLEVEL% EQU 0 goto auto_no_win81 
:: ver | findstr /i "10\.0\." > nul 
:: IF %ERRORLEVEL% EQU 0 goto auto_no_Win10 


:auto_no_winxp 
echo WINDOWS XP Detected.. 
echo Switching to direct choose.. 
GOTO auto_no_direct 

:auto_no_winvista 
echo WINDOWS Vista Detected.. 
echo WINDOWS 10 Detected.. 
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Manufacturer" /C:"System Type" /C:"Windows Directory" /C:"System Directory" /C:"Domain" /C:"Logon Server" 

GOTO end 

:auto_no_win7 
echo WINDOWS 7 Detected.. 
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Manufacturer" /C:"System Type" /C:"Windows Directory" /C:"System Directory" /C:"Domain" /C:"Logon Server" 

GOTO end 

:auto_no_win81 
echo WINDOWS 8.1 Detected.. 
echo WINDOWS 10 Detected.. 
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Manufacturer" /C:"System Type" /C:"Windows Directory" /C:"System Directory" /C:"Domain" /C:"Logon Server" 

GOTO end 

:auto_no_win10 
echo WINDOWS 10 Detected.. 
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Manufacturer" /C:"System Type" /C:"Windows Directory" /C:"System Directory" /C:"Domain" /C:"Logon Server" 

GOTO end 

:auto_no_direct 
set source="%UserProfile%\AppData\Local\Microsoft\Communicator\" 
IF EXIST "%UserProfile%\AppData\Local\Microsoft\Communicator\" (
echo Ms Lync Communicator directory found.. 
echo ^-^> MS Lync 2010 
echo Profiles: 


for %%x in (*.txt) do (
    set /a count=count+1 
    set choice[!count!]=%%x 
) 
for /l %%x in (1,1,!count!) do (
    echo %%x] !choice[%%x]! 
) 


set /p select=Type profile then press ENTER: 
echo Pointer_procent: %select% 
echo Pointer_wykrzyk: !select! 

echo Selected: !choice[%select%]! 






) ELSE (
echo There not found Communicator directory 
echo ^-^> No MS Lync installed.. 
echo ^-^> Terminating..Press any key 
) 

GOTO end 



GOTO end 
::========== MANUAL ============================================================ 


::========== AUTO ============================================================== 
::========== CHOICE ============================================================ 
:auto_yes 
cls 
echo Consipz - Lync Profile Reset 
echo ------------------------------- 
echo Starting Auto Mode... 
GOTO end 
::========== AUTO ============================================================== 


:end 
pause > nul 

и у меня есть проблемы в этом разделе:

for %%x in (*.txt) do (
    set /a count=count+1 
    set choice[!count!]=%%x 
) 
for /l %%x in (1,1,!count!) do (
    echo %%x] !choice[%%x]! 
) 


set /p select=Type profile then press ENTER: 
echo Pointer_procent: %select% 
echo Pointer_wykrzyk: !select! 

echo Selected: !choice[%select%]! 

Im пытается спросить пользователя для выбранного варианта. Но я не могу показать, что он выбирает. Например: Пользователь после просмотра вариантов, как:

1] choice1.txt 
2] choice2.txt 

и select..maybe 2 должны видеть:

Selected: choice2.txt 

Я пытался почти все, и я знаю, что, вероятно, проблема с SETLOCAL ,

Пожалуйста, помогите;) PS: Пропустите код при попытке решить, какие Windows использует пользователь. я переключился метки целевой на цели Couse им с помощью W10

EDIT: Это было полезно :) я решил мою проблему с решением, как:

if *condition* (
goto yes 
)else(
goto no 
) 
:yes 
REM menu as files 

:no 
REM terminate 

Сейчас я стою перед другой проблемы. Как я могу сделать, не будут файлы * .txt в виде опций, кроме папок. Имя этих папок начинается с «sip», например [email protected]?

Когда я пытаюсь этот код:

for %%x in ('dir /b /s /a:d "%UserProfile%\AppData\Local\Microsoft\Communicator\*"') do (
    set /a count=count+1 
    set choice[!count!]=%%x 
) 

я вижу что-то вроде этого в результате:

Profiles: 
1] 'dir 
2] /b 
3] /s 
4] /a:d 
Type profile then press ENTER: 

ответ

0

Проблема заключается в том, что указанный код помещается внутри if. Таким образом, вам понадобится отсроченное расширение для переменной !select! и замедленного расширения для массива !choice[...]!. Как-то вроде !choice[!select!]! не может быть правильно разобрано, трюк необходим

for %%r in (!select!) do echo !choice[%%r]! 

Сохранением значения переменного индекса в for заменяемого параметра мы можем получить два запаздывающих переменные без проблемы синтаксиса.

+0

Было полезно :) –

0

Попробуйте следующий подход (call подпрограммы):

:auto_no_direct 
set source="%UserProfile%\AppData\Local\Microsoft\Communicator\" 
IF EXIST "%UserProfile%\AppData\Local\Microsoft\Communicator\" (
    echo Ms Lync Communicator directory found.. 
    echo ^-^> MS Lync 2010 
    echo Profiles: 


    for %%x in (*.txt) do (
    set /a count=count+1 
    set choice[!count!]=%%x 
) 
    for /l %%x in (1,1,!count!) do (
    echo %%x] !choice[%%x]! 
) 

    set /p select=Type profile then press ENTER: 
    echo Pointer_procent: %select% 
    echo Pointer_wykrzyk: !select! 

    call :subSelect "choice[!select!]" 
    echo Selected: choice[!select!] !Selected! 

) ELSE (
    echo There not found Communicator directory 
    echo ^-^> No MS Lync installed.. 
    echo ^-^> Terminating..Press any key 
) 

GOTO end 

:subSelect 
set "Selected=!%~1!" 
exit /B 
0

И на всех конце я tryied этот код:

FOR /F "tokens=*" %%x in ('dir /on /b /a:d /p "%UserProfile%\AppData\Local\Microsoft\Communicator\*"') do (
    set /a count=count+1 
    set choice[!count!]=%%x 
) 

Спасибо FPR помощь!

Смежные вопросы