identificador exclusivo para um processo DOS em uma única máquina


1

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.


2
Você nunca deve colocar seus próprios arquivos em C: \ Windows. Por que você não coloca esses arquivos em% USERPROFILE%?
Jamie Hanrahan

Ou alguma pasta completamente diferente que possa ser acessada por todos. O que significa "processo atualmente à mão"? Por que você não pode nomear o arquivo com qualquer identificador exclusivo que você queira?
Aulis Ronkainen

O comando em questão é o i_view64.exe, o editor de imagens bitmap de 64 bits Irfanview. Eu uso da seguinte forma: 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.
Francky Leyn

Eu também quero usar `C:` porque essa partição no PC multitarefa / multiusuário está em uma unidade SSD e isso é mais rápido que os outros HDDs daquele PC. Em * NIX, um tem / tmp / $$ para uma unidade rápida. Na máquina do PC, o SSD é o mais rápido. O comando i_view64.exe faz parte dos scripts bat que contêm comandos FOR, por exemplo, em 380 arquivos .png. Isso leva facilmente 10 minutos. Eu tenho um virtual * NIX no PC, mas não quero usá-lo. Eu quero usar o DOS porque o Win 10 PC é principalmente baseado em DOS.
Francky Leyn

Então usando 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.
Francky Leyn

Respostas:


0

A resposta

Se você quiser usar o PID de cmd.exe, faça o seguinte:

title=uniqueTitle
for /f "tokens=2 USEBACKQ" %f IN (`tasklist /NH /FI "WINDOWTITLE eq uniqueTitle*"`) Do set ourPID=%f
i_view64.exe inputfile.jpg /info=%temp%\%ourPID%.txt

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ê:

%temp%\%username%-%date%-%random%.txt

Ajuste conforme necessário. Cada uma dessas variáveis ​​se expande para criar um caminho completo para um arquivo.


Eu uso no arquivo bat get_resolution.bat que contém:
Francky Leyn

i_view64.exe jpg_inputfile.jpg /info=textfile.txt. Então, eu não preciso do ID do processo de i_view64.exe. Preciso do ID do processo do script de chamada get_resolution.bat.
Francky Leyn

Eu tenho que usar %USERNAME%? " echo %TEMP% " é igual a C:\Users\FRANCK~1\AppData\Local\Temp. O que significa aquilo " ~ " de qualquer forma? " echo %USERNAME% "entrega" Francky Leyn "
Francky Leyn

CALL i_view64.exe "input.jpg" /info=%TEMP%\IrfanView\info_%DATE%-%TIME%-%RANDOM%.txt" entrega CALL 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%-?
Francky Leyn

K: \ teste & gt; ECHO% TIME% 12: 38: 21.00
Francky Leyn
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.