我创建了一个批处理脚本,它运行WMIC以从特定进程获取PID。如果我打开bat脚本,我会看到'ProcessID 1234'或'No Instance(s)Available'。在命令窗口中。
我想创建一个IF语句,检查此命令的输出是PID还是No Instance(s) Available.
。我可以使用哪个变量?
我的代码:
wmic process where "Name like '%%cmd.exe%%' and CommandLine like '%%WatchdogStarter.bat%%'" get processid
if %%outputfromthiswmiccommand%% == 'No Instance(s) Available.' ....
答案 0 :(得分:6)
您可以使用以下批处理代码来获取流程标识符值或分配给变量echo /?
的错误消息。
for /?
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
if /?
set /?
wmic /?
2>nul
No Instance(s) Available.
另请参阅Using command redirection operators以了解2>nul
将 STDERR 写入 STDERR 的错误消息^
(英文Windows)重定向到设备 NUL 。必须使用2>nul
转义ProcessID
中的尖括号以应用function day_check($paymentDate, $paymentDay = 1) {
$CI =& get_instance();
$dateParts = explode("-", $paymentDate);
$holQ = $CI->db->query("SELECT * FROM holidays WHERE holidayDate = '$paymentDate'");
$holR = $holQ->row();
if ($paymentDay <= 0) {
$paymentDay = 1;
}
// while -> if
if (($holR->holidayDate == $paymentDate) || (date("l", strtotime($paymentDate)) == 'Saturday') || (date("l", strtotime($paymentDate)) == 'Sunday')) {
echo "$paymentDate: $paymentDay <br>";
$refinedDay = $dateParts[2] + 1;
if ($refinedDay < 10) {
$refinedDay = "0" . $refinedDay;
}
$paymentDate = $dateParts[0] . "-" . $dateParts[1] . "-" . ($refinedDay);
$paymentDay = $dateParts[2] + 1;
return day_check($paymentDate, $paymentDay); // return!
// break; // no need
}
echo "Final: $paymentDate: $paymentDay <br>";
return $paymentDay;
}
来命令 wmic 而不是命令 FOR 。
将错误消息重定向到设备 NUL ,如果 wmic 命令不成功,则确保while
不存在,这比比较 wmic的输出要好使用特定字符串作为错误消息取决于Windows的语言。此解决方案独立于Windows语言。
答案 1 :(得分:2)
感谢所有帮助人员。 我通过使用TASKLIST而不是WMIC解决了我的问题。
WMIC给了我输出,从2个非ascii字符和2行不可用信息开始。我必须过滤这些,有效。
@echo off
for /f "skip=1 tokens=*" %%i in ('wmic process where name^="chrome.exe" get Processid') do echo %%i
这种方法有用,但是当我试图“观看”的程序没有运行时,它给了我一个随机的pid,我认为我得到的pid来自正在查询请求的进程ID的WIDC进程。
这就是为什么我尝试使用TASKLIST并使用FINDSTR搜索完整输出以找到我正在寻找的正确pid。这对我有用。
for /f "tokens=2 delims=," %%P in ('tasklist /v /fo csv ^| findstr /i "WatchdogStarterBATCH"') do set pid=%%~P
感谢所有帮助!:)
答案 2 :(得分:1)
我也认为你的引号有问题(或者我的例子中有双引号):例如我的脚本中有以下代码:
IF "%5"==""
你看到&#39; ==&#39;的两边都有(双)引号。登录。
换句话说,我会用以下代码替换你的行:
if '%%outputfromthiswmiccommand%%' == 'No Instance(s) Available.' ....
答案 3 :(得分:0)
如果wmic未能找到PID%errorlevel%将被设置。在IF语句中使用它。