2014-12-04 76 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