2013-08-29 103 views
1

所以即时通讯设法让我的技术人员的生活更轻松,因为他们有时会忘记在新格式化的电脑上设置某些内容。在.bat文件中启动.reg文件

我设法设置了它的功率设置部分,但即时通讯有麻烦的小数点符号和日期格式。我有一个HKEY_USERS.DEFAULT \ Control Panel \ International的完全导出,就像我想要的一样,但我很难将它放入当前的bat文件,因为我不真的想让它们运行超过1个文件。所以我认为它可能会很好,如果可以把注册表值放在批处理文件中,也许可以启动它作为一个单独的shell?我dono任何意见将是伟大的。这是我到目前为止。

.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 

注册表值我要在批处理文件:

[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"="" 
"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" 

回答

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=" 
    "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)读取注册表后写的值。
运行代码之前,如果需要从注册表进行备份。

+0

似乎并没有改变注册表中的值。即使以管理员身份运行, –

+0

也可以在XP和win8上运行。 – Endoro

+0

@ user2728293我添加了控制代码以在写入新值后读取注册表。如果该值未设置,则会收到错误消息。请现在试试。 – Endoro