4

Так что у меня есть куча мест, которые мне нужно проверить на наличие двух возможных имен файлов, однако имена каталогов различаются.

Вот, по сути, то, что я пытаюсь оптимизировать:

for /r "%ProgramFiles%\WildGames" %%i in (Uninstall.exe) do ( if exist "%%i" "%%i" /silent ) >nul 2>&1
for /r "%ProgramFiles(x86)%\WildGames" %%i in (Uninstall.exe) do ( if exist "%%i" "%%i" /silent ) >nul 2>&1
for /r "%ProgramFiles%\WildGames" %%i in (Uninstaller.exe) do ( if exist "%%i" "%%i" /silent ) >nul 2>&1
for /r "%ProgramFiles(x86)%\WildGames" %%i in (Uninstaller.exe) do ( if exist "%%i" "%%i" /silent ) >nul 2>&1

Кроме того, мне нужно также проверить другие места, а не только WildGames. Я делаю следующее:

set wtlist1[0]=%ProgramFiles%
set wtlist1[1]=%ProgramFiles(x86)%

set wtlist2[0]=Acer Games
set wtlist2[1]=ASUS Games
set wtlist2[2]=Dell Games
set wtlist2[3]=Gateway Games
set wtlist2[4]=HP Games
set wtlist2[5]=Lenovo Games
set wtlist2[6]=TOSHIBA Games
set wtlist2[7]=WildTangent
set wtlist2[8]=WildTangent Games
set wtlist2[9]=WildGames

set wtlist3[0]=Uninstall.exe
set wtlist3[1]=Uninstaller.exe

Теперь вот где я немного растерялся. Я знаю, что должен сделать что-то, как это:

for %%a in (wtlist2[0],1,wtlist2[9]) do (
    for %%b in (wtlist1[0],1,wtlist1[1]) do (
        for %%c in (wtlist3[0],1,wtlist3[1]) do (
            echo C:\%%b\%%a\%%c
        )
    )
)

Но, очевидно, не совсем так, и я в основном запутался до этого момента. мой массив не увеличивается на 1, но в противном случае, похоже, это может сработать?

Спасибо!

2 ответа2

4
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
set "wtlist1[0]=%ProgramFiles%"
set "wtlist1[1]=%ProgramFiles(x86)%"

set "wtlist2[0]=Acer Games"
set "wtlist2[1]=ASUS Games"
set "wtlist2[2]=Dell Games"
set "wtlist2[3]=Gateway Games"
set "wtlist2[4]=HP Games"
set "wtlist2[5]=Lenovo Games"
set "wtlist2[6]=TOSHIBA Games"
set "wtlist2[7]=WildTangent"
set "wtlist2[8]=WildTangent Games"
set "wtlist2[9]=WildGames"

set "wtlist3[0]=Uninstall.exe"
set "wtlist3[1]=Uninstaller.exe"

for /L %%a in (0,1,9) do (
    for /L %%b in (0,1,1) do (
        for /L %%c in (0,1,1) do (
            echo "!wtlist1[%%b]!\!wtlist2[%%a]!\!wtlist3[%%c]!"
        )
    )
)

Другой подход:

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
for %%a in (
    "Acer Games"
    "ASUS Games"
    "Dell Games"
    "Gateway Games"
    "HP Games"
    "Lenovo Games"
    "TOSHIBA Games"
    "WildTangent"
    "WildTangent Games"
    "WildGames"
) do (
    for %%b in (
        "%ProgramFiles%"
        "%ProgramFiles(x86)%"
    ) do (
        for %%c in (
            "Uninstall.exe"
            "Uninstaller.exe"
        ) do (
            echo "%%~b\%%~a\%%~c"
        )
    )
)

Ресурсы (требуется чтение):

2
for %%a in (one two three) do (
    for %%b in (six seven nine) do (
        echo C:\%%a\%%b
    )
)

Повторите столько раз, сколько необходимо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .