Arquivo em lote - Como executo um arquivo .exe com um nome aleatório?

1

Estou tentando fazer um arquivo de lote executar um arquivo .exe depois de baixá-lo. O problema é que o nome do arquivo baixado é randomizado no momento do download (feito na página da Web da qual ele foi baixado). Não tenho como adivinhar o nome do arquivo, portanto, quero que o arquivo em lote execute o arquivo .exe, independentemente do nome que ele possa ter.

Eu quero:

1: baixe o arquivo - o que ele faz perfeitamente.

2: em seguida, execute o arquivo .exe, independentemente do nome, o que não funciona como esperado. (Erro; o Windows não consegue encontrar o '* .exe'. Certifique-se de ter digitado o nome corretamente e tente novamente) - Eu tentei várias soluções fornecidas na Web a partir de um mashup de perguntas - nada funciona.

3: apague o arquivo - o que ele faz perfeitamente.

Isso é o que eu consegui até agora:

echo Downloading file...
start "" https://TheWebPagesName.com
PING localhost -n 10 >NUL
echo Running file...
start "C:\Users\MyUsername\OneDrive\Dokumenter\Foldername\*.exe"
PING localhost -n 10 >NUL
echo Deleting File...
del "C:\Users\MyUsername\OneDrive\Dokumenter\Foldername\*.exe"
PING localhost -n 2 >NUL
echo Done!
PING localhost -n 6 >NUL
echo Exiting...
PING localhost -n 4 >NUL

Alguma sugestão?

    
por H4yw1r3_88 08.05.2018 / 20:42

2 respostas

0

Você pode fazer isso usando forfiles.

Os arquivos Forfiles podem procurar por arquivos e, em seguida, executar um comando e usar os arquivos que ele encontra como variável ou fazer algumas verificações. Forfiles suporta máscaras de arquivo, e dado que você explicou que o exefile é o único arquivo na pasta, forfiles podem ser usados.

Seu script ficaria assim:

echo Downloading file...
start "" https://TheWebPagesName.com
PING localhost -n 10 >NUL
echo Running file...

:: comment out old row for easy reading    
:: start "C:\Users\MyUsername\OneDrive\Dokumenter\Foldername\*.exe"

:: insert new comamnd instead:
forfiles /p "C:\Users\MyUsername\OneDrive\Dokumenter\Foldername" /m *.exe /c "@file"

:: if you were not using executables, but would want to use start file.txt, you would use:
::forfiles /p "C:\Users\MyUsername\OneDrive\Dokumenter\Foldername" /m *.txt /c "cmd /c @file"

PING localhost -n 10 >NUL
echo Deleting File...
del "C:\Users\MyUsername\OneDrive\Dokumenter\Foldername\*.exe"
PING localhost -n 2 >NUL
echo Done!
PING localhost -n 6 >NUL
echo Exiting...
PING localhost -n 4 >NUL
    
por 09.05.2018 / 12:02
0

Use aria2 para baixar esse arquivo. Então corra. Use este script em lote:

aria2c.exe --out="FileName.exe" --check-certificate=false --dir="C:\folder\path" "download_link"
"C:\folder\path\FileName.exe"
timeout /t 10
del "C:\folder\path\FileName.exe"
pause
    
por 09.05.2018 / 11:03