Eu uso uma máquina Win 10 com diferentes usuários, e todos estes podem usar um mesmo arquivo bat.
Nos scripts de bat, eu preciso de um arquivo temporário com um nome único que consiste em um identificador para o processo atualmente disponível nessa máquina. Portanto, pode haver vários desses processos ao mesmo tempo.
Como nome de arquivo, quero usar C: \ Windows \ Temp \ ???. Txt.
A questão é o que ??? devemos ser.
i_view64.exe inputfile.jpg /info=???.txt
. ??? deve abranger usuários diferentes na mesma máquina, e também vários desses comandos pelo mesmo usuário na mesma máquina. Em * NIX / POSIX, isto é $$. Eu não sei o que é no DOS.C:\Windows\Temp\IrfanView\%USERPROFILE%\info_???.txt
seria uma primeira tentativa. Nesse caso, só tem que ter em conta ??? para os diferentes processos iniciados pelo mesmo usuário ao mesmo tempo nessa máquina.Respostas:
A resposta
Se você quiser usar o PID de cmd.exe, faça o seguinte:
Me divagando porque eu não entendi a pergunta:
No contexto de um arquivo em lotes executando o "processo atual em questão" é o do interpretador de comandos (conhost.exe ou cmd.exe). Se você deseja obter o ID do processo do i_view64.exe, você deve primeiro executá-lo e, em seguida, obter o ID do processo (que não é trivial). No seu caso, você está pedindo o ID do processo antes de ele ser criado. Não há como prever o que será no momento em que você está alimentando um argumento de linha de comando para o processo, pois ele não foi iniciado.
Se você quiser apenas um nome de arquivo temporário exclusivo em um local seguro e confiável, verifique esta pergunta:
https://stackoverflow.com/questions/27802376/create-unique-name-name-windows-batch
Existem várias soluções sugeridas.
Geralmente você usa% TEMP% para obter a localização temporária no sistema. Então você gera seu nome de arquivo.
algo assim pode funcionar para você:
Ajuste conforme necessário. Cada uma dessas variáveis se expande para criar um caminho completo para um arquivo.
fonte
get_resolution.bat
que contém:i_view64.exe jpg_inputfile.jpg /info=textfile.txt
. Então, eu não preciso do ID do processo dei_view64.exe
. Preciso do ID do processo do script de chamadaget_resolution.bat
.%USERNAME%
? "echo %TEMP%
" é igual aC:\Users\FRANCK~1\AppData\Local\Temp
. O que significa aquilo "~
" de qualquer forma? "echo %USERNAME%
"entrega"Francky Leyn
"CALL i_view64.exe "input.jpg" /info=%TEMP%\IrfanView\info_%DATE%-%TIME%-%RANDOM%.txt"
entregaCALL i_view64.exe "input.jpg" /info="C:\Users\FRANCK~1\AppData\Local\Temp\IrfanView\info_Fri 11/16/2018- 9:44:27.14-13375.txt"
. Por que o espaço depois%DATE%-
?