Я всегда пытался предотвратить возникновение проблемы, а не исправлять ее позже. По этой причине вот несколько альтернативных предложений по решению проблемы нежелательного перевода строки.
Если вы можете включить свойство до и после целевого свойства, (в данном случае ParentProcessID
) и убедитесь, что эти свойства 'pre' и 'post' не будут иметь значение NULL, вы можете получить свое значение без проблемного возврата c.
Пример:
@Set "PPID="
@For /F "EOL=H Tokens=2" %%A In ('""%__AppDir__%wbem\WMIC.exe" Process Where Name="%PROCESS_NAME%" Get Handle,ParentProcessID,SessionID 2>NUL"')Do @Set "PPID=%%A"
@Set PPID 2>NUL
@Pause
В качестве альтернативы вы можете использовать
wmi c /Format
.
Пример:
@Set "PPID="
@For /F "Skip=1 Tokens=2 Delims=," %%A In ('""%__AppDir__%wbem\WMIC.exe" Process Where Name="%PROCESS_NAME%" Get ParentProcessID /Format:CSV 2>NUL"') Do @Set "PPID=%%A"
@Set PPID 2>NUL
@Pause
Примечание: В windows -7 мне известна проблема, связанная с неправильным расположением необходимых файлов .xsl
. Одним из исправлений является перемещение этих файлов в правильный каталог \Windows\System32\wbem
. В качестве альтернативы найдите его местоположение и укажите его непосредственно в значении. На системах, которые я использовал, я нашел csv.xsl
в \Windows\System32\wbem\en-US
, чтобы вы могли использовать (с необходимыми настройками):
@Set "PPID="
@For /F "Skip=1 Tokens=2 Delims=," %%A In ('""%__AppDir__%wbem\WMIC.exe" Process Where Name="%PROCESS_NAME%" Get ParentProcessID /Format:"%__AppDir__%wbem\en-US\csv.xsl" 2>NUL"') Do @Set "PPID=%%A"
@Set PPID 2>NUL
@Pause