我需要从批处理脚本读取注册表的默认值。某些项目的名称包含一些空格。另外我想执行一次两个循环的批处理文件。阅读由空格和字符串值分隔的词也包含批处理脚本中的空间
rem @echo OFF
setlocal ENABLEEXTENSIONS
set KEY_NAME="HKEY_CURRENT_USER\Software\abc\xyz pqr"
FOR /F "tokens=1-3 delims=<TAB>" %%A IN ('REG QUERY %KEY_NAME% 2^>nul') DO (
set ValueName=%%A
set ValueType=%%B
set ValueValue=%%C
)
if defined ValueName (
@echo Value Name = %ValueName%
@echo Value Type = %ValueType%
@echo Value Value = %ValueValue%
) else (
@echo %KEY_NAME%\%VALUE_NAME% not found.
)
pause
它提供了以下输出
rem @echo OFF
setlocal ENABLEEXTENSIONS
set KEY_NAME="HKEY_CURRENT_USER\Software\abc\xyz pqr"
FOR /F "tokens=1-3 delims=<TAB>" %A IN ('REG QUERY "HKEY_CURRENT_USER\Software\abc\xyz pqr" 2>nul') DO (
set ValueName=%A
set ValueType=%B
set ValueValue=%C
)
(
set ValueName=HKEY_CURREN
set ValueType=_USER\Software\abc\xyz pq
set ValueValue=
)
(
set ValueName= (Default) REG_SZ C:\Program Files (x86)\abc\
set ValueType=
set ValueValue=
)
(
set ValueName=
set ValueType=uthor REG_SZ gj
set ValueValue=
)
(
set ValueName= Version REG_SZ 1.4.0.0
set ValueType=
set ValueValue=
)
if defined ValueName (
) else()
Value Name = Version REG_SZ 1.4.0.0
Value Type =
Value Value =
pause
Press any key to continue . . .
我想获得以下输出,也希望这个for循环应该停止,一旦我得到(默认)
(
set ValueName=(Default)
set ValueType=REG_SZ
set ValueValue=C:\Program Files (x86)\abc\
)
感谢的价值提前帮助我!
您需要[延期扩展](http://ss64.com/nt/delayedexpansion.html)。要使用_space_和_tab_作为分隔符,只需省略'delims'选项,因为它们是默认的; ''指定从字面上使用这五个字符... –
aschipfl