Пакет Windows, как найти файл и запустить его с поддержкой глубины папки - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь найти установочный файл в подкаталоге и запустить его в качестве параметризованной установки без вывода сообщений.Имя подкаталога постоянно меняется, и мне нужно сделать это в глубине = 1, потому что есть несколько установочных файлов.Например:

root dir C:\temp
C:\temp\
|-\subdir1\setup.exe (want to run this one but it sometimes can be Setup.exe)
|-\subdir1\subsubdir1\setup.exe
|-\subdir1\subsubdir2\
|-\subdir1\subsubdir3\setup.exe

Попытка написать сценарий в PowerShell, где полный путь к файлу был сохранен в переменной и введен в команду, но у PowerShell есть проблемы с запуском автоматической установки, и в большинстве случаев они просто не могут быть установлены правильно,Понятия не имею почему.При запуске той же команды из cmd она работает отлично.К сожалению удалил его по ошибке, поэтому не могу показать код.И еще одна проблема заключается в том, что версия powershell различается для разных типов Windows, поэтому некоторые внутренние команды работают, а некоторые нет.

Также пытались каким-то образом изменить это решение из аналогичного ответа:

for /f "delims=" %%i in ('dir /b /a-d /s C:\temp\setup.exe /someparams') do "%%~fi"

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

Прямо сейчас я пытаюсь сделать то же самое, что и в powershell, используя batch, и получаю следующее:

for /r C:\temp %%a in (*) do if "%%~nxa"=="setup.exe" set p=%%~dpnxa
if defined p (
start "%p% /silent /othervar"
) else (
echo Something did not work.
)

Сейчас я застрял ипонятия не имею, как добиться того, чего я хочу.Надеюсь, кто-то может помочь.

1 Ответ

0 голосов
/ 20 декабря 2018

Ваша первая команда ошибочно вставляет /someparams в каталог вместо проверки наличия файла setup.exe и передачи его ему.

Во 2-й партии используется /r, она нежелательно возвращается и находит всеsetup.exe в subsubdirs.

Используйте For /D, чтобы ограничить каталоги 1-го уровня

for /d %%a in ("C:\temp\*") do if exist "%%~fa\setup.exe" "%%~fa\setup.exe" /someparams

Или - если setup.exe ожидает найти файлы / папки в текущем каталоге - используйте:

for /d %%a in ("C:\temp\*") do if exist "%%~fa\setup.exe" (
    cd /D "%%~fa"
    setup.exe /someparams
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...