2014-12-04 79 views
1

当经由CMD查询下面批次变量打印注册表CSV

REG QUERY "HKCU\Printers\Connections" 

的输出是:

HKEY_CURRENT_USER\Printers\Connections\,,xxx-SD-KDP11,Colour 
HKEY_CURRENT_USER\Printers\Connections\,,xxx-SD-KDP11,Mono 

然而运行包含代码的批处理文件时,下面

@echo OFF 
setlocal enableextensions enabledelayedexpansion 
echo ============================ 
echo Network Printers ... 
if exist network_printers.txt del network_printers.txt 
if exist network_printers2.txt del network_printers2.txt 

set reg_keys= 
set blank= 
set printers_network_paths= 
set printers_network_types= 

REG QUERY "HKCU\Printers\Connections" > network_printers.txt 

for /f "tokens=* delims=" %%A in ('type network_printers.txt') do set network_printers_init=!network_printers_init! %%A 
echo !network_printers_init! > network_printers2.txt 
echo !network_printers_init! 
pause 

for /f "usebackq tokens=1,* delims=, skip=4" %%a in ('network_printers2.txt') do (
    set reg_keys = !reg_keys! %%a 
) 

for /f "tokens=2,* delims=, skip=4" %%a in ('type network_printers2.txt') do (
    set blank = !blank! %%b 
) 

for /f "tokens=3,* delims=, skip=4" %%a in ('type network_printers2.txt') do (
    set printers_network_names = !printers_network_names! %%c 
) 

for /f "tokens=4,* delims=, skip=4" %%a in ('type network_printers2.txt') do (
    set printers_network_types = !printers_network_types! %%d 
) 

echo reg_keys: !reg_keys! 
echo blank: !blank! 
echo Network Printers paths: !printers_network_names! 
echo Network Printers types: !printers_network_types! 

echo Network Printers paths: !printers_network_names! >> %file% 
echo Network Printers types: !printers_network_types! >> %file% 
pause 

的生成的.csv文件对于!printers_network_names没有任何作用!和!printers_network_types! 另外echo行显示最后4个变量中没有任何内容存储。

请指教?

回答

1

for /f循环中,"skip=4"表示跳过4行,但network_printers2.txt只包含一行。

还有一些可以改进的其他东西。主要是,当您在批处理脚本中设置变量时,应该像set "varname=string"一样引用,并且=周围没有空格。没有中间文本文件和type的无用使用,您也可以做您所需要的。

我不完全确定你想要的最终结果是什么,但它看起来像让你的脚本比它需要的复杂得多。

@echo OFF 
setlocal enableextensions enabledelayedexpansion 
echo ============================ 
echo Network Printers ... 

for /f "tokens=2* delims=," %%A in ('REG QUERY "HKCU\Printers\Connections"') do (
    set "printers_network_names=!printers_network_names! %%A" 
    set "printers_network_types=!printers_network_types! %%B" 
) 

echo Network printer paths: !printers_network_names! 
echo Network printer types: !printers_network_types! 

结果:

============================ 
Network Printers ... 
Network printer paths: xxx-SD-KDP11 xxx-SD-KDP11 
Network printer types: Colour Mono 
+0

谢谢。就像你提到的那样,我太过复杂了。是的,我确实认为'skip'选项是用于跳过标记而不是线条,后者是正确的。 – 2014-12-08 09:40:33

+0

另外,我将如何规定值之间的所有空格 - 例如'xxx-SD-KDP11 xxx-SD-KDP11'中有空格。你将如何去除'for'循环中的空间并用单个'''替换? – 2014-12-08 09:57:35