Variables 批量变量打印注册表CSV
通过cmd查询以下内容时Variables 批量变量打印注册表CSV,variables,batch-file,for-loop,registry,printers,Variables,Batch File,For Loop,Registry,Printers,通过cmd查询以下内容时 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 enabledelayedexp
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文件没有任何内容!打印机\网络\名称!还有!打印机\网络\类型!
另外,echo
行显示最后4个变量中未存储任何内容
请告知?在
for/f
循环中,“skip=4”表示跳过4行,但network\u printers2.txt
仅包含一行
还有一些其他的东西可以改进。主要是,在批处理脚本中设置变量时,应该设置“varname=string”
,这样引用,并且=
周围没有空格。您也可以在不使用中间文本文件和无用的类型
的情况下执行所需操作
我不完全确定你想要的最终结果是什么,但看起来你让你的脚本变得比需要的复杂得多
@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
非常感谢。正如你所说,我把事情复杂化了。是的,我确实认为
skip
选项用于跳过令牌而不是行,后者是正确的。此外,我如何在值之间键入所有空格-例如xxx-SD-KDP11 xxx-SD-KDP11
中有空格。如何删除for
循环中的空格并替换为单个|
?