我是第一次尝试一些cmd.exe编码。我创建了一个注册表项,其中包含一个由自定义协议处理程序调用的命令。我想要完成的任务:调用Adobe Reader,它会自动将pdf打印到给定的打印机。这部分已经有效了。我正在使用powershell从URL本地下载pdf。我也想在完成后杀死Acrobat进程,但只有在调用我的命令之前已经打开它,所以如果用户在通过Chrome调用协议处理程序时已经打开了pdf,我就不会终止进程。
请原谅不仅仅是丑陋的格式,在我的情况下,单行命令是必须的,我不能制作批处理文件或.ps1文件。
cmd /V /C set exists="0" & (tasklist | find "AcroRd32.exe" > nul) & if
(%%ERRORLEVEL%%==0 set exists="1") & set myvar=%1 & call set
myvar=%%myvar:ie:=%% & call set printer=%%myvar:*@@@=%% & call set
printer=^"%%printer%%^" & call set printer=%%printer:'=%% & call start
powershell.exe -ExecutionPolicy Bypass -Command $url=%%myvar%%; $pdf =
$url.split('@'); md -Force c:\TempPdf "| Out-Null"; (New-Object
System.Net.WebClient).DownloadFile($pdf,'C:/TempPdf/PatientLabel.pdf'); &
timeout /t 2 & call start acrord32.exe /n /t C:/TempPdf/PatientLabel.pdf
%%printer%% & timeout /t 2 & (if !exists!=="1" taskkill /f /im acrord32.exe)
不起作用的部分是tasklist / taskkill。我想将%% exists %%变量设置为1,如果我可以在启动AcroRd32.exe之前找到正在运行的进程,并在打印后将其杀死,如果%%存在%% = 1。我认为这可能因为执行时间/解析而无法正常工作,但我真的不知道如何使用/ V和!var!无论如何。 exists和ERRORLEVEL变量似乎没有扩展。
感谢您的帮助!