【发布时间】:2019-12-16 09:55:39
【问题描述】:
我正在尝试使用 FOR 循环运行查询,并将查询的每个结果变量行输出到它自己的文件中。
我似乎无法让延迟扩展变量按照我希望的方式运行。
基本上,我正在查询安装在打印服务器上的打印机,并且我想要一个包含某些文本的 .bat 作业,并将结果输出到包含结果名称的多个文件。
我认为问题在于我没有正确转义某些字符,或者我缺少 % 或 !在一个变量上,或者它们的某种组合上。
@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=1 delims=*" %%G IN ('wmic /node:PRINTSERVER printer get name') DO (
SET printer=%%G
SET printers=!printers: =!
SET printers=!printers:Name=!
ECHO ^(
@ECHO OFF
ECHO PLEASE WAIT WHILE YOUR PRINTER IS INSTALLED
ECHO.
ECHO ^"%windir%\system32\cscript %windir%\system32\prnmngr.vbs -ac -p \\PRINTSERVER\!printer!"^)>>!printer!.bat
)
endlocal
预期结果应该是多个名为PRINTERSHARENAME.bat的文件
每个都包含:
@ECHO OFF
ECHO PLEASE WAIT WHILE YOUR PRINTER IS INSTALLED
ECHO.
%windir%\system32\cscript %windir%\system32\prnmngr.vbs -ac -p "\\PRINTSERVER\PRINTERSHARENAME"
编辑
我将分享更多我的代码。 wmic 输出包含必须去除的空格,所以这就是我使用 enableelayedexpansion 的原因
EDIT2
这是我的 wmic 命令的输出(请注意,我在上面的代码中删除了尾随空格以及命令末尾的单词“名称”和一个空行):
C:\Users\bleepbloop>wmic /node:PRNTSVR printer get name
Name
PRINTER1
PRINTER2
OFFICEPRINTER
EDIT3
好的,我快接近了。这是使用以下答案重现的代码:
(
echo Here is my first line
echo Here is my second line
echo Here is my third line
)>"textfile.txt"
FOR /F "delims=" %%G IN ('TYPE textfile.txt') DO (
(
ECHO @ECHO OFF
ECHO ECHO PLEASE WAIT WHILE YOUR PRINTER IS INSTALLED
ECHO ECHO.
ECHO "%%windir%%\system32\cscript" "%%windir%%\system32\prnmngr.vbs" -ac -p \\PRINTSERVER\%%G
)>%%G.bat
)
这按预期工作,并为我提供了 3 个名为
的文件Here is my first line.bat
Here is my second line.bat
Here is my third line.bat
但是现在我想从 textfile.txt 输出的变量中去掉所有空格,为此我认为我需要使用延迟扩展?
所以我想要:
Hereismyfirstline.bat
Hereismysecondline.bat
Hereismythirdline.bat
我认为我需要通过使用 enabledelayedexpansion 并在 FOR 循环中插入以下内容来做到这一点:
SET variable=%%G
SET variable=!variable: =!
然后我必须将变量正确插入到循环中。仍然不确定如何。
我要文件
Hereismyfirstline.bat
包含
@ECHO OFF
ECHO PLEASE WAIT WHILE YOUR PRINTER IS INSTALLED
ECHO.
"%windir%\system32\cscript" "%windir%\system32\prnmngr.vbs" -ac -p \\PRINTSERVER\Hereismyfirstline
还有下一个文件
Hereismysecondline.bat
包含:
@ECHO OFF
ECHO PLEASE WAIT WHILE YOUR PRINTER IS INSTALLED
ECHO.
"%windir%\system32\cscript" "%windir%\system32\prnmngr.vbs" -ac -p \\PRINTSERVER\Hereismysecondline
【问题讨论】:
标签: batch-file for-loop variables output