我正试图从自己的命令提示符中获取PID。但是当使用下面的命令时,我总是得不到所需的输出。你能指出下面的陈述中的错误是什么吗?
cmd.exe /c title="mycmd" & tasklist /v /fo csv | findstr /i "mycmd" & dir & help
修改
以下命令正常工作。但是当它与另外两个命令结合时。它不起作用。
cmd.exe /c title="mycmd" & tasklist /v /fo csv | findstr /i "mycmd"
其他信息:
我正在使用Java
final List<String> commands = new ArrayList<String>();
commands.add("cmd.exe");
commands.add("/C");
//.. Add more commands
ProcessBuilder pb = new ProcessBuilder(commands);
答案 0 :(得分:3)
您可以使用以下批处理文件获取cmd提示的PID。
参考: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/270f0842-963d-4ed9-b27d-27957628004c/
<强> GetPID.bat 强>
@echo off
if not defined SESSIONNAME set SESSIONNAME=Console
setlocal
set instance=%DATE% %TIME% %RANDOM%
title %instance%
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "SESSIONNAME eq %SESSIONNAME%" /FI "USERNAME eq %USERNAME%" /FI "WINDOWTITLE eq %instance%" ^| find /i "PID:"`)
do set PID=%%a
if not defined PID for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "SESSIONNAME eq %SESSIONNAME%" /FI "USERNAME eq %USERNAME%" /FI "WINDOWTITLE eq Administrator: %instance%" ^| find /i "PID:"`)
do set PID=%%a
if not defined PID
echo !Error: Could not determine the Process ID of the current script. Exiting.& exit /b 1
echo PID: "%PID%"
答案 1 :(得分:1)
您需要在子shell中执行复合命令的引号:
cmd.exe /c "title="mycmd" & tasklist /v /fo csv | findstr /i "mycmd" & dir & help"
如果没有引号,该命令将被解析为
(cmd.exe /c title="mycmd") & (tasklist /v /fo /csv) | (findstr /i "mycmd") & (dir) & (help)
所以当tasklist
运行时,具有指定标题的cmd.exe
实例已经退出。
答案 2 :(得分:0)
您可能缺少一些重定向运算符。阅读更多here.
答案 3 :(得分:0)
为CMD窗口指定一个唯一的名称,在本例中为“test”。 “Windowstitle”是“test *”,因为执行的命令行将附加到标题。
title test
taskkill /FI "IMAGENAME eq cmd.exe" /FI "WINDOWTITLE ne test*" /f
答案 4 :(得分:0)
我发现我还必须使用具有用户名的域名。
@IF NOT DEFINED SESSIONNAME (@SET SESSIONNAME=Console)
@SETLOCAL
@SET EXITCODE=0
@SET instance=%DATE% %TIME% %RANDOM%
@TITLE %instance%
@FOR /F "usebackq tokens=1,2" %%a IN (`tasklist /FO list /FI "SESSIONNAME eq %SESSIONNAME%" /FI "USERNAME eq %USERDOMAIN%\%USERNAME%" /FI "WINDOWTITLE eq %instance%" ^| FIND /I "PID:"`) DO @(
@SET PID=%%b
)
@IF NOT DEFINED PID (
@FOR /F "usebackq tokens=1,2" %%a IN (`tasklist /FO list /FI "SESSIONNAME eq %SESSIONNAME%" /FI "USERNAME eq %USERDOMAIN%\%USERNAME%" /FI "WINDOWTITLE eq Administrator: %instance%" ^| FIND /I "PID:"`) DO @(
@SET PID=%%b
)
)
@IF NOT DEFINED PID (
@ECHO ERROR: Could not determine the Process ID of the current script.
@SET EXITCODE=1
) ELSE (
@ECHO %PID%
)
@EXIT /B %EXITCODE%