批处理脚本:处理文本文件输入和输出

时间:2014-05-27 14:32:04

标签: batch-file printing text-files

我试图创建一个脚本来删除名称中名称中包含特定单词的给定计算机上的所有打印机。

到目前为止,这是我的剧本:

Cscript %WINDIR%\System32\Printing_Admin_Scripts\en-US\Prnmngr.vbs -l
:: lists printers

Cscript %WINDIR%\System32\Printing_Admin_Scripts\en-US\Prnmngr.vbs -l >>%USERPROFILE%\printers.txt
:: outputs to text file

set LINECOUNT=0
for /f "delims==" %%I in (%USERPROFILE%\printers.txt) do (
set /a LINECOUNT=LINECOUNT+1    
)

echo There are like %LINECOUNT% lines in this document. >>%USERPROFILE%\printers.txt

type %USERPROFILE%\printers.txt | findstr /b /c:"Printer name PRINTERtobeDELETED" >>%USERPROFILE%\filter.txt

FOR /f "tokens=*" in (%USERPROFILE%\filter.txt) do STUFF THAT DELETES THE FIRST 13 CHARACTERS, GOD. (OR FIRST TWO WORDS/TOKENS, W/E) >> %USERPROFILE%\trimmer.txt

基本上,我从这里出来的最大问题是这两个:

  1. 我有一个打印机名称列表,前缀为"打印机名称PRINTER",我想简单地隔离名称,所以我需要删除前两个单词或13个字符

  2. 我需要创建一个循环,将文本文档的每一行都输入到将删除打印机的代码中。

  3. 感谢您阅读本文,并度过美好的一天!

1 个答案:

答案 0 :(得分:0)

如果您还有要在filter.txt中删除的打印机列表,并且该文件的内容类似于

Printer name here goes the printer name
-1-------2----3----4----5----6------7---- = number of token in the line

然后所需要的只是丢弃两个第一个令牌(空格分隔)并获得剩余的。因此,我们将要求第二个令牌以及另一个令牌中的其余部分(打印机名称)

for /f "tokens=2,*" %%a in ("%USERPROFILE%\filter.txt") do (
    cscript "%WINDIR%\System32\Printing_Admin_Scripts\en-US\Prnmngr.vbs" -d -p "%%b"
)

这里我们要求for命令读取文件中的每一行,并且对于每一行,使用空格作为分隔符(默认行为)对行进行拆分/标记化。然后,tokens=2,*子句指示来自行中所有可能的标记,我们想要第二个元素以及该行中的所有剩余元素。第二个令牌将被放置在第一个可用的可替换参数中,即for行中指示的,因此,在我们的示例中为%%a。该行的其余部分将放在下一行中,因此%%b将保留该行中的其余数据。

因此,%%a将保留字符串name(来自“打印机名称”),%%b将保留打印机的名称。

使用打印机的名称,调用Prnmgr.vbs以删除(-d)指示的打印机(-p