首页 > 解决方案 > 批处理文件检查文件夹内容并重新启动打印后台处理程序不起作用

问题描述

我们遇到了一个问题,即 24 英寸绘图仪不断冻结,解决此问题的唯一方法是停止打印后台处理程序,删除打印机内容,然后重新启动后台处理程序。对于非技术人员来说,这非常困难,所以我想我会写一个简单的批处理文件(如下)来帮助......

@echo off
echo Press any key to fix Plotter frozen print queue.
pause
sc stop Spooler
echo Spooler service stopped, please wait.
timeout 5
if exist "C:\Windows\System32\spool\PRINTERS\*.*" (
echo Files are in the print queue
echo **check no other printer is being used before continuing**
pause
del "C:\Windows\System32\spool\PRINTERS\*.*"
) else (
echo There are no files in any print queues
)
sc start Spooler
echo Spooler service restarting, please wait.
timeout 5
pause

现在除了文件夹的反馈之外,这一切都有效......如果文件夹是空的,它仍然说那里有东西!?

我知道这是一个问题中的一个问题,但我也看不到在它运行时检查假脱机状态的方法......所以我使用超时来延迟事情

该服务有状态,但我不知道如何在批处理文件中检查这些状态,我也不知道运行和停止的状态:/

STATE              : 2  START_PENDING
STATE              : 3  STOP_PENDING

提前致谢

标签: windowsbatch-file

解决方案


要知道,如果文件夹中有文件:

dir /b "C:\Windows\System32\spool\PRINTERS\*" | findstr "^" 2>nul && (
  echo files found 
) || (
  echo no files found
)

要获取后台处理程序状态:

for /f "tokens=3,4" %%a in ('sc query spooler ^|find "STATE"') do set "state=%%a %%b"
echo Spooler state: %state%

(可能您%%a只需要进行数值比较或%%b仅用于字符串比较)


推荐阅读