уникальный идентификатор для процесса DOS на 1 одном компьютере

491
Francky Leyn

Я использую машину Win 10 с разными пользователями, и все они могут использовать один и тот же файл bat.

В скриптах bat мне нужен временный файл с уникальным именем, состоящим из идентификатора для процесса, который в данный момент находится на этой машине. Таким образом, может быть несколько таких процессов одновременно.

В качестве имени файла нужно использовать C: \ Windows \ Temp \ ???. Txt.

Вопрос в том, что ??? должно быть.

1
Вы никогда не должны помещать свои собственные файлы в C: \ Windows. Почему бы вам не поместить эти файлы в% USERPROFILE%? Jamie Hanrahan 5 лет назад 2
Или какая-то совершенно другая папка, доступ к которой может получить каждый. Что означает «процесс в настоящее время под рукой»? Почему вы не можете назвать файл с любым уникальным идентификатором, который вы хотите? Aulis Ronkainen 5 лет назад 0
Команда под рукой - i_view64.exe, 64-битный редактор растровых изображений Irfanview. Я использую его следующим образом: `i_view64.exe inputfile.jpg / info = ???. Txt`. ??? должен охватывать разных пользователей на одном компьютере, а также несколько таких команд одним и тем же пользователем на одном компьютере. В * NIX / POSIX это $$. Я не знаю, что это на DOS. Francky Leyn 5 лет назад 0
Я также хочу использовать `C: \`, потому что этот раздел на многозадачном / многопользовательском ПК находится на диске SSD, и это быстрее, чем на других жестких дисках этого компьютера. В * NIX есть / tmp / $$ для быстрого диска. На этом компьютере это самый быстрый SSD. Команда i_view64.exe является частью сценариев bat, которые содержат команды FOR, например, для 380 .png файлов. Это легко 10 минут. У меня есть виртуальный * NIX на этом ПК, но я не хочу его использовать. Я хочу использовать DOS, потому что этот Win 10 PC в основном основан на DOS. Francky Leyn 5 лет назад 0
Поэтому использование `C: \ Windows \ Temp \ IrfanView \% USERPROFILE% \ info _ ???. Txt` было бы первой попыткой. В этом случае нужно только принять во внимание ??? для разных процессов, запущенных одним и тем же пользователем в одно и то же время на этой машине. Francky Leyn 5 лет назад 0
В этой системе моя учетная запись находится в% USERPROFILE%, который равен «C \ Users \ Francky Leyn», и, следовательно, на том C: \ SSD этой машины. Так что «% USERPROFILE% \ tmp \ IrfanView \ info _ ???. Txt» сделает эту работу, если я знаю, что ??? должно быть. Francky Leyn 5 лет назад 0

1 ответ на вопрос

0
HackSlash

Ответ

Если вы хотите использовать PID cmd.exe, сделайте следующее:

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 

Я бред, потому что я не понял вопроса:

В контексте командного файла «текущий процесс под рукой» - это интерпретатор команд (conhost.exe или cmd.exe). Если вы хотите получить идентификатор процесса для i_view64.exe, вам необходимо сначала запустить его, а затем получить идентификатор процесса (что нетривиально). В вашем случае вы запрашиваете идентификатор процесса до его создания. Невозможно предсказать, что будет, когда вы вводите аргумент командной строки в процесс, так как он еще не запущен.

Если вы просто хотите получить уникальное временное имя файла в безопасном и надежном месте, вам следует проверить этот вопрос:

https://stackoverflow.com/questions/27802376/create-unique-file-name-windows-batch

Есть ряд предлагаемых решений.

Обычно вы используете% TEMP% для получения временного местоположения в системе. Затем вы генерируете свое имя файла.

что-то вроде этого может работать для вас:

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

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

Я использую его в файле bat `get_resolution.bat`, который содержит: Francky Leyn 5 лет назад 0
`i_view64.exe jpg_inputfile.jpg / info = textfile.txt`. Поэтому мне не нужен идентификатор процесса `i_view64.exe`. Мне нужен идентификатор процесса вызывающего скрипта `get_resolution.bat`. Francky Leyn 5 лет назад 0
Нужно ли использовать `% USERNAME%`? «echo% TEMP%» равно «C: \ Users \ FRANCK ~ 1 \ AppData \ Local \ Temp`. Что означает, что "` ~ `" в любом случае? "` echo% USERNAME% `" поставляет "` Francky Leyn` " Francky Leyn 5 лет назад 0
`CALL i_view64.exe" input.jpg "/ info =% TEMP% \ IrfanView \ info_% DATE% -% TIME% -% RANDOM% .txt" `доставляет` 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 "`. Почему пробел после `% DATE% -`? Francky Leyn 5 лет назад 0
K: \ test> ECHO% TIME% 12: 38: 21.00 Francky Leyn 5 лет назад 0
Это никогда не может работать, потому что ":" не является допустимым символом имени файла NTFS. Francky Leyn 5 лет назад 0
@FranckyLeyn Теперь я понимаю. Я положил ответ, который вам нужен, в верхней части моего поста. HackSlash 5 лет назад 0