【问题标题】:Filter results in batch script for user printer selection在批处理脚本中过滤结果以供用户打印机选择
【发布时间】:2021-02-21 13:47:56
【问题描述】:

我正在尝试创建一个脚本,以允许用户在打印之前将默认 Windows 打印机临时设置为选定的打印机(PDF、XPS、OneNote),然后在指定时间后自动将默认设置回原始打印机。

我已经设法合并了许多不同示例的元素以到达脚本运行的阶段,尽管它在列表的开头和结尾创建了一个额外的条目。 我想过滤用户显示的打印机列表,只显示适当列表中的打印机(例如 PDF、XPS、OneNote)。

任何帮助将不胜感激。

    @echo off
    setlocal enableDelayedExpansion
    
    FOR /F "tokens=2* delims==" %%A in (
      'wmic printer where "default=True" get name /value'
      ) do SET DefaultPrinter=%%A
    
    ECHO.
    ECHO ==============================================================
    ECHO Current Default Printer
    ECHO ==============================================================
    ECHO.
    ECHO Default Printer = %DefaultPrinter%
    ECHO.
    
    pause
    Cls
    
    ECHO ==============================================================
    ECHO Processing locally installed printers
    ECHO ==============================================================
    
    ::build "array" of printers
    set printerCnt=0
    for /f "eol=: delims=" %%F in ('wmic printer get Name') do (
      set /a printerCnt+=1
      set "printer!printerCnt!=%%F"
    )
    
    
    ::print menu
    for /l %%N in (1 1 %printerCnt%) do echo %%N - !printer%%N!
    echo(
    
    
    :get selection
    set selection=
    set /p "selection=Enter a printer number: "
    echo You picked !printer%selection%!
    set NewPrinter=!printer%selection%!
    
    ::trim selection
    set str=%NewPrinter%
    for /l %%a in (1,1,31) do if "!str:~-1!"==" " set str=!str:~0,-1!

    
    RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%str%"
    
    TIMEOUT 10
    
    RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%DefaultPrinter%"

[编辑 /] 我已经包含了我最终使用的代码。这是基于@Hackoo 提供的答案,我也合并了@Magoo 提供的元素。可能有一种更优雅的方式来编写这段代码,但我是新手,所以按照我的理解进行了布局。

@echo off
Mode 70,30 & color F0
Title Healthmail Printer Selection
FOR /F "tokens=2* delims==" %%A in (
  'wmic printer where "default=True" get name /value'
  ) do SET "DefaultPrinter=%%A"

ECHO.
ECHO    ==============================================================
ECHO                    Current Default Printer
ECHO    ==============================================================
ECHO.
ECHO           Default Printer = [%DefaultPrinter%]
ECHO.
TIMEOUT /T 2 /NoBreak>nul

Cls
ECHO.
ECHO    ==============================================================
ECHO                        Available Printers
ECHO    ==============================================================
Setlocal EnableDelayedExpansion
::build "array" of printers
Set "FilterList=%Temp%\FilterList.txt"
REM Create a file to filter just for PDF printers
>"%FilterList%" (
    echo PDF
)

set printerCnt=0
@for /f "delims=" %%a in (
'wmic printer get Name ^|findstr /G:%FilterList%"'
) do ( 
    @for /f "delims=" %%b in ("%%a") do (
        set /a printerCnt+=1
        set "printer!printerCnt!=%%~nb"
    )
)

::If no printers have been found, go to filterlistlong
:zerofilterprinters
IF !printerCnt!==0 GOTO :filterlistlong
IF !printerCnt! gtr 0 GOTO :printmenu


:filterlistlong
Set "FilterListLong=%Temp%\FilterListLong.txt"
REM Create a file to filter with each word like XPS,OneNote and PDF
>"%FilterListLong%" (
    echo PDF
    echo XPS
    echo OneNote
)

set printerCnt=0
@for /f "delims=" %%a in (
'wmic printer get Name ^|findstr /G:%FilterListLong%"'
) do ( 
    @for /f "delims=" %%b in ("%%a") do (
        set /a printerCnt+=1
        set "printer!printerCnt!=%%~nb"
    )
)


:printmenu
SET "choices="
for /l %%N in (1 1 %printerCnt%) do SET "choices=!choices!%%N"&SET "printer%%N=!printer%%N!"&IF %printercnt% gtr 1 echo %%N - !printer%%N!
echo(


:get selection
:: If no available options, exit
IF NOT DEFINED choices GOTO :EOF 

:: If only 1 option, auto-select that
IF %choices%==1 SET /a selection=1&GOTO autoselect

choice /c %choices% /m "Enter a printer number: "
set selection=%ERRORLEVEL%
:: Error condition
IF %selection% gtr %printercnt% GOTO :EOF 
:: Control-C
IF %selection% equ 0 GOTO :EOF 

cls
ECHO    ==============================================================
ECHO                 You selected: !printer%selection%!
ECHO    ==============================================================
echo.
echo. Please proceed to print document.
echo.
echo. This window will close automatically in 30 seconds.
::GOTO :setprinter

:autoselect
set NewPrinter=!printer%selection%!
cls
ECHO    ==============================================================
ECHO              Printer selected: !printer%selection%!
ECHO    ==============================================================
echo.
echo. Please proceed to print document.
echo.
echo. This window will close automatically in 10 seconds.

:setprinter
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%NewPrinter%"
TIMEOUT /T 10 /nobreak > NUL
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%DefaultPrinter%"

GOTO :EOF

If Exist "%FilterList%" Del "%FilterList%"
If Exist "%FilterListLong%" Del "%FilterListLong%"

【问题讨论】:

  • 如果您想过滤您的枚举打印机列表,您应该能够将其直接合并到您的WMIC 命令中。例如:… Printer Where "Name Like 'OneNote%%' Or Name Like '%%PDF%%' Or Name Like '%%XPS%%'" Get …。我没有直接将其合并到我的答案中,(或其最近添加的附加编辑,以同时满足 Windows 7 和 Server 2008 R2),但如果您愿意,它不应该给您带来问题进行调整。

标签: windows batch-file cmd


【解决方案1】:

WMIC 的输出是 unicode !

可以通过另一个 FOR /F 循环传递值来删除尾随 <CR>

这也删除了幻象“空白”行(实际上是<CR>),在这种情况下您不需要使用Trim 函数!

@echo off
Mode 70,30 & color 0A
Title Filter results in batch script for user printer selection
FOR /F "tokens=2* delims==" %%A in (
  'wmic printer where "default=True" get name /value'
  ) do SET "DefaultPrinter=%%A"

ECHO.
ECHO    ==============================================================
ECHO                    Current Default Printer
ECHO    ==============================================================
ECHO.
ECHO           Default Printer = [%DefaultPrinter%]
ECHO.
TIMEOUT /T 3 /NoBreak>nul

Cls
ECHO.
ECHO    ==============================================================
ECHO              Processing locally installed printers
ECHO    ==============================================================
Setlocal EnableDelayedExpansion
::build "array" of printers
REM We Ignore printer begin with Micro or Fax in the name
Set "FilterList=%Temp%\FilterList.txt"
REM We create a file to filter with each word like XPS,OneNote and PDF
>"%FilterList%" (
    echo XPS
    echo OneNote
    echo PDF
)

set printerCnt=0
@for /f "skip=1 delims=" %%a in (
'wmic printer get Name ^|findstr /G:%FilterList%"'
) do ( 
    @for /f "delims=" %%b in ("%%a") do (
        set /a printerCnt+=1
        set "printer!printerCnt!=%%~nb"
    )
)

::print menu
for /l %%N in (1 1 %printerCnt%) do echo    [%%N] - [!printer%%N!]
echo    ==============================================================

:get selection
set selection=
set /p "selection=Enter a printer number: "
set "NewPrinter=!printer%selection%!"
echo. You picked [%NewPrinter%]

RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%NewPrinter%"
TIMEOUT /T 10
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%DefaultPrinter%"

If Exist "%FilterList%" Del "%FilterList%"

【讨论】:

  • 我不知道您可以像这样格式化窗口,所以感谢您向我展示如何实现干净的外观。关于如何过滤结果以仅显示包含 PDF、XPS 或 OneNote 的打印机名称的任何想法?
  • 用过滤器列表最后编辑的代码再试一次!
  • 太好了,感谢您的帮助。我只需要删除我认为是上一个版本的人工制品的 skip=1。
  • 我将把你的答案标记为正确,因为我昨天开始与最终用户测试你的答案。从那以后,我也从@Magoo 提供的答案中融入了很多逻辑,所以我也非常感谢这个输入。
【解决方案2】:
@echo off
setlocal ENABLEDELAYEDEXPANSION

SET "printfilter=%1"

FOR /F "tokens=2* delims==" %%A in (
  'wmic printer where "default=True" get name /value'
  ) do SET DefaultPrinter=%%A

ECHO.
ECHO ==============================================================
ECHO Current Default Printer
ECHO ==============================================================
ECHO.
ECHO Default Printer = %DefaultPrinter%
ECHO.

pause
Cls

ECHO ==============================================================
ECHO Processing locally installed printers
ECHO ==============================================================

::build "array" of printers
set printerCnt=0
for /f "skip=1eol=: delims=" %%F in ('wmic printer get Name') do (
  set /a printerCnt+=1
  set "printer!printerCnt!=%%F"
  IF DEFINED printfilter ECHO %%F|FIND /i "%printfilter%" >nul&IF ERRORLEVEL 1 SET /a printercnt-=1
)
iF NOT DEFINED printfilter (
 set "printer%printerCnt%="
 SET /a printercnt-=1
)


::print menu
SET "choices="
for /l %%N in (1 1 %printerCnt%) do SET "choices=!choices!%%N"&SET "printer%%N=!printer%%N:~0,-1!"&IF %printercnt% gtr 1 echo %%N - !printer%%N!
echo(


:get selection

:: If no available options, exit
IF NOT DEFINED choices GOTO :EOF 

:: If only 1 option, auto-select that

IF %choices%==1 SET /a selection=1&GOTO autoselect

choice /c %choices% /m "Enter a printer number: "
set selection=%ERRORLEVEL%
:: Error condition
IF %selection% gtr %printercnt% GOTO :EOF 
:: Control-C
IF %selection% equ 0 GOTO :EOF 
echo You picked !printer%selection%!
:autoselect
set NewPrinter=!printer%selection%!

::trim selection
set str=%NewPrinter%
for /l %%a in (1,1,31) do if "!str:~-1!"==" " set str=!str:~0,-1!

ECHO RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%str%"

ECHO TIMEOUT 10

ECHO RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "%DefaultPrinter%"

GOTO :EOF

有趣的...

首先,要指定过滤器,只需将适当的字符串(PDF, XPS, OneNote) 作为参数附加到批处理名称。省略此项将选择 ALL。

第一步是将skip=1 添加到for /f ... %%F...,以便跳过报告中的Name 行。

接下来,如果调用了过滤器,则检测打印机名称是否包含过滤器字符串。如果没有,则备份打印机计数器。

构建数组后,注意最后一个(虚假)条目将被记录,除非调用过滤器,清除最后一个(虚假)条目并备份计数器。

WMIC 输出的要点在于它不仅是 Unicode,而且它的行终止符是 <CR><CR><LF> 而不是 <CR><LF>。存储在数组中的每个文本值都有一个终端 <CR>。因此,最后一个条目是虚假的。

因此,对于通过过滤器的每个条目,将允许的选项字符串构建到 choices 中,并从打印机名称字符串中删除最后一个字符并显示它。

现在如果没有选择,退出(或其他)。

如果只有一个选项,则自动选择它(并且不显示选择列表)否则使用choice 从列表中选择打印机。

您需要添加到选项列表中以允许选择 #9 以外的打印机。

我选择简单地 echo rundll32s 和超时测试。

【讨论】:

  • 谢谢,我对批处理文件的经验很少,所以你的代码很有帮助。我从没想过错误处理,所以添加它是非常有益的。选择后不必按 Enter 键也是一个不错的选择。我能够将过滤器硬编码到特定的打印机 - SET "printfilter=Microsoft XPS Class Driver" - 但是有没有办法将它设置为诸如 PDFXPS 之类的东西i>, OneNote?
【解决方案3】:

我只列举打印机一次,然后去掉很多不必要的屏幕输出:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "SysDir=%SystemRoot%\System32"
For /F "Delims==" %%G In ('"(Set Printer[) 2>NUL"') Do Set "%%G="
Set "DefaultPrinter="
For /F "Tokens=1-3,* Delims=[,]" %%G In ('%SysDir%\wbem\WMIC.exe Printer Get
 Default^, Name /Format:CSV 2^>NUL ^| %SysDir%\findstr.exe "E\>" ^|
 %SysDir%\find.exe /V /N ""') Do For /F "Tokens=*" %%K In ("%%J") Do (
    Echo([%%G] %%K
    If "%%I" == "TRUE" Set "DefaultPrinter=%%K"
    Set "Printer[%%G]=%%K")
If Not Defined Printer[1] (Echo No printers found.
    Echo Press any key to end . . .
    GoTo :EOF)
Echo(
(Set DefaultPrinter) 2>NUL || Echo No default printer found.

:Selection
Echo(
Set "UserPrinter="
Set /P "UserPrinter=Enter the number for your preferred printer>"
Set "UserPrinter=%UserPrinter:"=%"
Set Printer[ | %SysDir%\findstr.exe /B /L "Printer[%UserPrinter%]=" 1>NUL || (
    GoTo Selection)
SetLocal EnableDelayedExpansion
For %%G In ("!Printer[%UserPrinter%]!") Do EndLocal & Set "UserPrinter=%%~G"
Echo(
Echo You Selected %UserPrinter%
%SysDir%\timeout.exe /T 3 /NoBreak 1>NUL

%SysDir%\rundll32.exe %SysDir%\printui.dll,PrintUIEntry /y /n "%UserPrinter%"
%SysDir%\timeout.exe /T 10
%SysDir%\rundll32.exe %SysDir%\printui.dll,PrintUIEntry /y /n "%DefaultPrinter%"

[编辑/]

如果您确实需要支持,并且您不能保证XSL 文件已经在目标机器上复制了一个级别,那么它应该仍然可以。虽然看起来有很多额外的行,但以下示例应该不会严重影响您的脚本速度,除了对相对较慢的WMIC.exe 的额外调用,(您的示例以及其他当前提交的答案,已经使用了多个WMIC 命令)

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "SysDir=%SystemRoot%\System32"
%SysDir%\wbem\WMIC.exe OS Where "Version Like '6.1%%'" Get Version 2>NUL ^
 | %SysDir%\find.exe "6.1" 1>NUL && Call :GetXSLDir
For /F "Delims==" %%G In ('"(Set Printer[) 2>NUL"') Do Set "%%G="
Set "DefaultPrinter="
For /F "Tokens=1-3,* Delims=[,]" %%G In ('%SysDir%\wbem\WMIC.exe Printer Get
 Default^, Name /Format:"%XSLDir%csv.xsl" 2^>NUL ^| %SysDir%\findstr.exe "E\>"
 ^| %SysDir%\find.exe /V /N ""') Do For /F "Tokens=*" %%K In ("%%J") Do (
    Echo([%%G] %%K
    If "%%I" == "TRUE" Set "DefaultPrinter=%%K"
    Set "Printer[%%G]=%%K")
If Not Defined Printer[1] (Echo No printers found.
    Echo Press any key to end . . .
    GoTo :EOF)
Echo(
(Set DefaultPrinter) 2>NUL || Echo No default printer found.

:Selection
Echo(
Set "UserPrinter="
Set /P "UserPrinter=Enter the number for your preferred printer>"
Set "UserPrinter=%UserPrinter:"=%"
Set Printer[ | %SysDir%\findstr.exe /B /L "Printer[%UserPrinter%]=" 1>NUL || (
    GoTo Selection)
SetLocal EnableDelayedExpansion
For %%G In ("!Printer[%UserPrinter%]!") Do EndLocal & Set "UserPrinter=%%~G"
Echo(
Echo You Selected %UserPrinter%
%SysDir%\timeout.exe /T 3 /NoBreak 1>NUL

%SysDir%\rundll32.exe %SysDir%\printui.dll,PrintUIEntry /y /n "%UserPrinter%"
%SysDir%\timeout.exe /T 10
%SysDir%\rundll32.exe %SysDir%\printui.dll,PrintUIEntry /y /n "%DefaultPrinter%"
GoTo :EOF

:GetXSLDir
For %%G In (Default InstallLanguage XSLDir) Do Set "%%G="
For /F "Tokens=1,2*" %%G In ('%SysDir%\reg.exe Query
 HKLM\System\CurrentControlSet\Control\Nls\Language 2^>NUL ^|
 %SysDir%\findstr.exe /I "\<Default\> \<InstallLanguage\>"'
) Do For /F "Tokens=2 Delims=:" %%J In ('%SysDir%\findstr.exe "::%%I:" "%~f0"'
) Do Set "%%G=%%J"
If Exist "%SysDir%\wbem\%Default%\*.xsl" (Set "XSLDir=%SysDir%\wbem\%Default%\"
) Else If Exist "%SysDir%\wbem\%InstallLanguage%\*.xsl" (
    Set "XSLDir=%SysDir%\wbem\%InstallLanguage%\")
For %%G In (Default InstallLanguage) Do Set "%%G="
Exit /B

::0001:ar
::0002:bg
::0003:ca
::0004:zh-Hans
::0005:cs
::0006:da
::0007:de
::0008:el
::0009:en
::000A:es
::000B:fi
::000C:fr
::000D:he
::000E:hu
::000F:is
::0010:it
::0011:ja
::0012:ko
::0013:nl
::0014:no
::0015:pl
::0016:pt
::0017:rm
::0018:ro
::0019:ru
::001A:hr
::001B:sk
::001C:sq
::001D:sv
::001E:th
::001F:tr
::0020:ur
::0021:id
::0022:uk
::0023:be
::0024:sl
::0025:et
::0026:lv
::0027:lt
::0028:tg
::0029:fa
::002A:vi
::002B:hy
::002C:az
::002D:eu
::002E:hsb
::002F:mk
::0030:st
::0031:ts
::0032:tn
::0033:ve
::0034:xh
::0035:zu
::0036:af
::0037:ka
::0038:fo
::0039:hi
::003A:mt
::003B:se
::003C:ga
::003D:yi
::003E:ms
::003F:kk
::0040:ky
::0041:sw
::0042:tk
::0043:uz
::0044:tt
::0045:bn
::0046:pa
::0047:gu
::0048:or
::0049:ta
::004A:te
::004B:kn
::004C:ml
::004D:as
::004E:mr
::004F:sa
::0050:mn
::0051:bo
::0052:cy
::0053:km
::0054:lo
::0055:my
::0056:gl
::0057:kok
::0058:mni
::0059:sd
::005A:syr
::005B:si
::005C:chr
::005D:iu
::005E:am
::005F:tzm
::0060:ks
::0061:ne
::0062:fy
::0063:ps
::0064:fil
::0065:dv
::0066:bin
::0067:ff
::0068:ha
::0069:ibb
::006A:yo
::006B:quz
::006C:nso
::006D:ba
::006E:lb
::006F:kl
::0070:ig
::0071:kr
::0072:om
::0073:ti
::0074:gn
::0075:haw
::0076:la
::0077:so
::0078:ii
::0079:pap
::007A:arn
::007C:moh
::007E:br
::0080:ug
::0081:mi
::0082:oc
::0083:co
::0084:gsw
::0085:sah
::0086:qut
::0087:rw
::0088:wo
::008C:prs
::0091:gd
::0092:ku
::0093:quc
::0401:ar-SA
::0402:bg-BG
::0403:ca-ES
::0404:zh-TW
::0405:cs-CZ
::0406:da-DK
::0407:de-DE
::0408:el-GR
::0409:en-US
::040A:es-ES_tradnl
::040B:fi-FI
::040C:fr-FR
::040D:he-IL
::040E:hu-HU
::040F:is-IS
::0410:it-IT
::0411:ja-JP
::0412:ko-KR
::0413:nl-NL
::0414:nb-NO
::0415:pl-PL
::0416:pt-BR
::0417:rm-CH
::0418:ro-RO
::0419:ru-RU
::041A:hr-HR
::041B:sk-SK
::041C:sq-AL
::041D:sv-SE
::041E:th-TH
::041F:tr-TR
::0420:ur-PK
::0421:id-ID
::0422:uk-UA
::0423:be-BY
::0424:sl-SI
::0425:et-EE
::0426:lv-LV
::0427:lt-LT
::0428:tg-Cyrl-TJ
::0429:fa-IR
::042A:vi-VN
::042B:hy-AM
::042C:az-Latn-AZ
::042D:eu-ES
::042E:hsb-DE
::042F:mk-MK
::0430:st-ZA
::0431:ts-ZA
::0432:tn-ZA
::0433:ve-ZA
::0434:xh-ZA
::0435:zu-ZA
::0436:af-ZA
::0437:ka-GE
::0438:fo-FO
::0439:hi-IN
::043A:mt-MT
::043B:se-NO
::043D:yi-Hebr
::043E:ms-MY
::043F:kk-KZ
::0440:ky-KG
::0441:sw-KE
::0442:tk-TM
::0443:uz-Latn-UZ
::0444:tt-RU
::0445:bn-IN
::0446:pa-IN
::0447:gu-IN
::0448:or-IN
::0449:ta-IN
::044A:te-IN
::044B:kn-IN
::044C:ml-IN
::044D:as-IN
::044E:mr-IN
::044F:sa-IN
::0450:mn-MN
::0451:bo-CN
::0452:cy-GB
::0453:km-KH
::0454:lo-LA
::0455:my-MM
::0456:gl-ES
::0457:kok-IN
::0458:mni-IN
::0459:sd-Deva-IN
::045A:syr-SY
::045B:si-LK
::045C:chr-Cher-US
::045D:iu-Cans-CA
::045E:am-ET
::045F:tzm-Arab-MA
::0460:ks-Arab
::0461:ne-NP
::0462:fy-NL
::0463:ps-AF
::0464:fil-PH
::0465:dv-MV
::0466:bin-NG
::0467:fuv-NG
::0468:ha-Latn-NG
::0469:ibb-NG
::046A:yo-NG
::046B:quz-BO
::046C:nso-ZA
::046D:ba-RU
::046E:lb-LU
::046F:kl-GL
::0470:ig-NG
::0471:kr-NG
::0472:om-ET
::0473:ti-ET
::0474:gn-PY
::0475:haw-US
::0476:la-Latn
::0477:so-SO
::0478:ii-CN
::0479:pap-029
::047A:arn-CL
::047C:moh-CA
::047E:br-FR
::0480:ug-CN
::0481:mi-NZ
::0482:oc-FR
::0483:co-FR
::0484:gsw-FR
::0485:sah-RU
::0486:qut-GT
::0487:rw-RW
::0488:wo-SN
::048C:prs-AF
::048D:plt-MG
::048E:zh-yue-HK
::048F:tdd-Tale-CN
::0490:khb-Talu-CN
::0491:gd-GB
::0492:ku-Arab-IQ
::0493:quc-CO
::0501:qps-ploc
::05FE:qps-ploca
::0801:ar-IQ
::0803:ca-ES-valencia
::0804:zh-CN
::0807:de-CH
::0809:en-GB
::080A:es-MX
::080C:fr-BE
::0810:it-CH
::0811:ja-Ploc-JP
::0813:nl-BE
::0814:nn-NO
::0816:pt-PT
::0818:ro-MD
::0819:ru-MD
::081A:sr-Latn-CS
::081D:sv-FI
::0820:ur-IN
::082C:az-Cyrl-AZ
::082E:dsb-DE
::0832:tn-BW
::083B:se-SE
::083C:ga-IE
::083E:ms-BN
::083F:kk-Latn-KZ
::0843:uz-Cyrl-UZ
::0845:bn-BD
::0846:pa-Arab-PK
::0849:ta-LK
::0850:mn-Mong-CN
::0851:bo-BT
::0859:sd-Arab-PK
::085D:iu-Latn-CA
::085F:tzm-Latn-DZ
::0860:ks-Deva
::0861:ne-IN
::0867:ff-Latn-SN
::086B:quz-EC
::0873:ti-ER
::09FF:qps-plocm
::0C01:ar-EG
::0C04:zh-HK
::0C07:de-AT
::0C09:en-AU
::0C0A:es-ES
::0C0C:fr-CA
::0C1A:sr-Cyrl-CS
::0C3B:se-FI
::0C50:mn-Mong-MN
::0C51:dz-BT
::0C5F:tmz-MA
::0C6b:quz-PE
::1001:ar-LY
::1004:zh-SG
::1007:de-LU
::1009:en-CA
::100A:es-GT
::100C:fr-CH
::101A:hr-BA
::103B:smj-NO
::105F:tzm-Tfng-MA
::1401:ar-DZ
::1404:zh-MO
::1407:de-LI
::1409:en-NZ
::140A:es-CR
::140C:fr-LU
::141A:bs-Latn-BA
::143B:smj-SE
::1801:ar-MA
::1809:en-IE
::180A:es-PA
::180C:fr-MC
::181A:sr-Latn-BA
::183B:sma-NO
::1C01:ar-TN
::1C09:en-ZA
::1C0A:es-DO
::1C1A:sr-Cyrl-BA
::1C3B:sma-SE
::2001:ar-OM
::2009:en-JM
::200A:es-VE
::200C:fr-RE
::201A:bs-Cyrl-BA
::203B:sms-FI
::2401:ar-YE
::2409:en-029
::240A:es-CO
::240C:fr-CD
::241A:sr-Latn-RS
::243B:smn-FI
::2801:ar-SY
::2809:en-BZ
::280A:es-PE
::280C:fr-SN
::281A:sr-Cyrl-RS
::2C01:ar-JO
::2C09:en-TT
::2C0A:es-AR
::2C0C:fr-CM
::2C1A:sr-Latn-ME
::3001:ar-LB
::3009:en-ZW
::300A:es-EC
::300C:fr-CI
::301A:sr-Cyrl-ME
::3401:ar-KW
::3409:en-PH
::340A:es-CL
::340C:fr-ML
::3801:ar-AE
::3809:en-ID
::380A:es-UY
::380C:fr-MA
::3c01:ar-BH
::3c09:en-HK
::3c0A:es-PY
::3c0C:fr-HT
::4001:ar-QA
::4009:en-IN
::400A:es-BO
::4401:ar-Ploc-SA
::4409:en-MY
::440A:es-SV
::4801:ar-145
::4809:en-SG
::480A:es-HN
::4C09:en-AE
::4C0A:es-NI
::5009:en-BH
::500A:es-PR
::5409:en-EG
::540A:es-US
::5809:en-JO
::580A:es-419
::5C09:en-KW
::5C0A:es-CU
::6009:en-TR
::6409:en-YE
::641A:bs-Cyrl
::681A:bs-Latn
::6C1A:sr-Cyrl
::701A:sr-Latn
::703B:smn
::742C:az-Cyrl
::743B:sms
::7804:zh
::7814:nn
::781A:bs
::782C:az-Latn
::783B:sma
::783F:kk-Cyrl
::7843:uz-Cyrl
::7850:mn-Cyrl
::785D:iu-Cans
::785F:tzm-Tfng
::7C04:zh-Hant
::7C14:nb
::7C1A:sr
::7C28:tg-Cyrl
::7C2E:dsb
::7C3B:smj
::7C3F:kk-Latn
::7C43:uz-Latn
::7C46:pa-Arab
::7C50:mn-Mong
::7C59:sd-Arab
::7C5C:chr-Cher
::7C5D:iu-Latn
::7C5F:tzm-Latn
::7C67:ff-Latn
::7C68:ha-Latn
::7C92:ku-Arab
::E40C:fr-015

【讨论】:

  • 感谢您在脚本中包含错误处理,这是一个有用的补充,它让用户清楚地知道他们选择了一个不正确的值并输入另一个值。该文件必须在多台机器上运行,并且在 Windows 10 上运行良好,但在 Windows 7 上无法运行?
  • @BrianK,Windows 7 存在一个已知问题,即 WMIC 在何处查找 XSL 文件,它用于格式化输出,因此很可能是导致您出现问题的原因。要测试这是否是您的问题,只需在命令提示符中运行以下命令,然后查看它返回的内容:%SystemRoot%\System32\wbem\WMIC.exe Printer Get Default, Name /Format:CSV。您没有提到这是针对过时/支持操作系统的,因此,我认为这不值得一提。 除了这个问题之外,代码应该在 Windows Vista 中的所有内容中都可以正常工作
  • @BrianK,要了解有关此 WMIC 问题的更多信息,请查看 herehere
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 2015-11-01
  • 2020-06-23
  • 1970-01-01
相关资源
最近更新 更多