在.bat文件中启动.reg

时间:2013-08-29 07:59:17

标签: date batch-file registry

所以我试图让技术人员的生活更轻松,因为他们有时会忘记在新格式化的电脑上设置某些东西。

我设法设置了它的电源设置部分,但我遇到了小数符号和日期格式的问题。我有一个HKEY_USERS.DEFAULT \控制面板\国际的完全导出,就像我想要它但我很难将它放入当前的bat文件,因为我真的不想要超过1个文件来运行它们。所以我认为如果可以将注册表值放在批处理文件中并且可能将其作为单独的shell启动它可能会很棒?我不知道任何建议会很棒。这是我到目前为止所做的。

Bat文件:

FOR /F "tokens=3 delims= " %%G IN ('wmic os get Caption /value') DO SET _version=%%G 
echo %_version%

IF %_version%==XP (
POWERCFG /setactive "always on"
POWERCFG /Change "always on" /monitor-timeout-ac 0
POWERCFG /Change "always on" /monitor-timeout-dc 0
POWERCFG /Change "always on" /disk-timeout-ac 0
POWERCFG /Change "always on" /disk-timeout-dc 0
POWERCFG /Change "always on" /standby-timeout-ac 0
POWERCFG /Change "always on" /standby-timeout-dc 0
POWERCFG /Change "always on" /hibernate-timeout-ac 0
POWERCFG /Change "always on" /hibernate-timeout-dc 0
) ELSE (
POWERCFG /Change /monitor-timeout-ac 0
POWERCFG /Change /monitor-timeout-dc 0
POWERCFG /Change /disk-timeout-ac 0
POWERCFG /Change /disk-timeout-dc 0
POWERCFG /Change /standby-timeout-ac 0
POWERCFG /Change /standby-timeout-dc 0
POWERCFG /Change /hibernate-timeout-ac 0
POWERCFG /Change /hibernate-timeout-dc 0
)

pause

我想要的bat文件中的注册表值:

[HKEY_USERS\.DEFAULT\Control Panel\International]
"Locale"="00001c09"
"LocaleName"="en-ZA"
"s1159"="AM"
"s2359"="PM"
"sCountry"="South Africa"
"sCurrency"="R"
"sDate"="/"
"sDecimal"="."
"sGrouping"="3;0"
"sLanguage"="ENS"
"sList"="."
"sLongDate"="dd MMMM yyyy"
"sMonDecimalSep"="."
"sMonGrouping"="3;0"
"sMonThousandSep"=" "
"sNativeDigits"="0123456789"
"sNegativeSign"="-"
"sPositiveSign"=""
"sShortDate"="dd/mm/yyyy"
"sThousand"=" "
"sTime"=":"
"sTimeFormat"="hh:mm:ss tt"
"sShortTime"="hh:mm tt"
"sYearMonth"="MMMM yyyy"
"iCalendarType"="1"
"iCountry"="27"
"iCurrDigits"="2"
"iCurrency"="2"
"iDate"="2"
"iDigits"="2"
"NumShape"="1"
"iFirstDayOfWeek"="6"
"iFirstWeekOfYear"="0"
"iLZero"="1"
"iMeasure"="0"
"iNegCurr"="2"
"iNegNumber"="1"
"iPaperSize"="9"
"iTime"="0"
"iTimePrefix"="0"
"iTLZero"="1"

2 个答案:

答案 0 :(得分:3)

如果您需要在批处理文件中,请尝试以下方法:

@echo off & setlocal
for %%a in (
     "Locale=00001c09"
     "LocaleName=en-ZA"
     "s1159=AM"
     "s2359=PM"
     "sCountry=South Africa"
     "sCurrency=R"
     "sDate=/"
     "sDecimal=."
     "sGrouping=3;0"
     "sLanguage=ENS"
     "sList=."
     "sLongDate=dd MMMM yyyy"
     "sMonDecimalSep=."
     "sMonGrouping=3;0"
     "sMonThousandSep= "
     "sNativeDigits=0123456789"
     "sNegativeSign=-"
     "sPositiveSign="
     "sShortDate=dd/mm/yyyy"
     "sThousand= "
     "sTime=:"
     "sTimeFormat=hh:mm:ss tt"
     "sShortTime=hh:mm tt"
     "sYearMonth=MMMM yyyy"
     "iCalendarType=1"
     "iCountry=27"
     "iCurrDigits=2"
     "iCurrency=2"
     "iDate=2"
     "iDigits=2"
     "NumShape=1"
     "iFirstDayOfWeek=6"
     "iFirstWeekOfYear=0"
     "iLZero=1"
     "iMeasure=0"
     "iNegCurr=2"
     "iNegNumber=1"
     "iPaperSize=9"
     "iTime=0"
     "iTimePrefix=0"
     "iTLZero=1"
     ) do for /f "tokens=1*delims==" %%b in ("%%~a") do (
        REG ADD "HKEY_USERS\.DEFAULT\Control Panel\International" /v "%%~b" /t REG_SZ /d "%%~c" /f
        FOR /f "tokens=2*" %%d IN ('REG QUERY "HKEY_USERS\.DEFAULT\Control Panel\International" /v "%%~b" 2^>nul^| find "REG_SZ"') DO (
            IF NOT "%%~c"=="%%~e" ECHO ERROR reading "%%~e" IN %%b, "%%~c" is NOT SET
        )
    )
)

我在写入值后添加了conrol代码(REG QUERY)来读取注册表 在运行代码之前,如果需要,请从注册表进行备份。

答案 1 :(得分:1)

您可以直接使用.reg导入regedit文件。只需在批处理文件中启动regedit /S yourfile.reg

/S隐藏了确认框。

有关详细信息,请参阅http://www.robvanderwoude.com/regedit.php