Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 用于检索打印机驱动程序名称的批处理文件;如果找到特定的驱动程序名称,请执行操作_Batch File_Printing_Wmic - Fatal编程技术网

Batch file 用于检索打印机驱动程序名称的批处理文件;如果找到特定的驱动程序名称,请执行操作

Batch file 用于检索打印机驱动程序名称的批处理文件;如果找到特定的驱动程序名称,请执行操作,batch-file,printing,wmic,Batch File,Printing,Wmic,免责声明:我不是程序员。我对不同的语言有着基本的了解,对技术有着普遍的天赋,并且在不断地学习。我一直在艰难地完成这项任务,希望自己能解决它,但现在我被卡住了。 我需要创建一个批处理文件,该文件将查询Windows并向我提供所有已安装打印机的驱动程序名,如果计算机上存在特定的驱动程序名,请执行另一个操作(在本例中,运行一个命令行实用程序,该实用程序将更改打印机的首选项) 到目前为止,我已经从互联网上的各种资源中“众包”了一些代码,但我还没有成功地获得批处理文件来完成我想要的任务 代码: 基本上,我

免责声明:我不是程序员。我对不同的语言有着基本的了解,对技术有着普遍的天赋,并且在不断地学习。我一直在艰难地完成这项任务,希望自己能解决它,但现在我被卡住了。

我需要创建一个批处理文件,该文件将查询Windows并向我提供所有已安装打印机的驱动程序名,如果计算机上存在特定的驱动程序名,请执行另一个操作(在本例中,运行一个命令行实用程序,该实用程序将更改打印机的首选项)

到目前为止,我已经从互联网上的各种资源中“众包”了一些代码,但我还没有成功地获得批处理文件来完成我想要的任务

代码:

基本上,我将其拼凑在一起,作为一个测试,如果它找到打印机的三个特定驱动程序名称中的任何一个,就在CMD中显示一条消息。我最终会用其他的操作来替换echo,假设我能让它工作的话。我认为应该发生的是,批处理文件将获取所有打印机驱动程序名称,并将它们填充到一个.txt文件中(这部分工作正常)。然后,批处理文件将循环并查看.txt文件中的内容,并使用空格作为delimeter,查找我要查找的特定打印机型号并显示echo。目前,如果我运行此批处理文件,它将创建.txt文件,但随后将退出而不显示任何消息。我查看了.txt文件,文件中有一台打印机,例如“HP DeskJet 1000”。如果你好奇的话,我跳过第一行,因为它只是说“司机姓名”


有什么建议吗?

我也不是程序员。以下是黑客编码,几乎肯定不是最有效的解决方案。也就是说它应该会起作用

代码:
WMIC输出为带BOM的UTF-16。这可能是你的问题的一部分。我可以在>>printerlist.txt之前放置|更多内容来解决这个问题吗?
@echo
setlocal
wmic printer get DriverName >> printerlist.txt
set count=0
FOR /F "skip=1 delims= " %%G IN (printerlist.txt) DO call :loop %%G %%H %%I
:loop
if "%1"=="" goto :endloop
if "%1"=="HP" (
   if "%2"=="DeskJet" (
      if "%3"=="1000" (
         echo Found: HP DeskJet 1000
         )
      if "%3"=="2000" (
         echo Found: HP DeskJet 2000
         )
      if "%3"=="3000" (
         echo Found: HP DeskJet 3000
         )
      pause
      )
   )
SHIFT
goto :loop
:endloop
FOR /F "skip=1 tokens=1,2,3* delims= " %%G IN ('wmic printer get DriverName') DO (
SET ONE=%%G
SET TWO=%%H
SET THREE=%%I
CALL :LOOP
)

GOTO ENDLOOP
:LOOP

if "%ONE%"=="" GOTO ENDLOOP
if %ONE%==HP GOTO FIRSTCHECK
GOTO :EOF

:FIRSTCHECK
if %TWO%==DESKJET GOTO SECONDCHECK
GOTO :EOF

:SECONDCHECK
if %THREE%==1000 GOTO 1000
if %THREE%==2000 GOTO 2000
if %THREE%==3000 GOTO 3000
GOTO :EOF

:1000
ECHO Found HP DeskJet 1000
pause
GOTO :EOF

:2000
ECHO Found HP DeskJet 2000
pause
GOTO :EOF

:3000
ECHO Found HP DeskJet 3000
pause
GOTO :EOF

:ENDLOOP