寻求更简洁的获取时区显示名称(TZDN)的批处理脚本方案
寻求更简洁的获取时区显示名称(TZDN)的批处理脚本方案
嘿,我看了你当前用来获取时区显示名称的批处理代码,确实可以简化不少!先把你的原代码贴出来方便参考:
@echo off for /f "tokens=1*" %%a in ('TZUTIL /g') do set TZID=%%a %%b SetLocal EnableDelayedExpansion for /f "tokens=1-4" %%a in ('TZUTIL /L') do ( set $U=%%a& if "!$U:~0,5!"=="(UTC+" set $TZDN=%%b %%c %%d if "%%a %%b %%c %%d"=="!TZID!" set TZDN=!$TZDN!& goto :found ) :found echo !TZDN!&pause rem TZID=TimeZone ID, TZDN=TimeZone Display Name
你的需求很明确:通过当前时区ID(TZID)获取对应的时区显示名称(TZDN),想找更简洁的实现方式对吧?
给你两个更简洁的方案:
方案一:分步匹配提取
@echo off :: 获取当前时区ID for /f "tokens=1*" %%a in ('tzutil /g') do set "TZID=%%a %%b" :: 匹配对应时区并提取显示名称 for /f "tokens=2-4 delims=()" %%a in ('tzutil /l ^| findstr /c:"%TZID%"') do set "TZDN=%%a" :: 输出结果 echo %TZDN% pause
方案二:单循环紧凑版本
@echo off for /f "tokens=1*" %%a in ('tzutil /g') do ( for /f "tokens=2-4 delims=()" %%x in ('tzutil /l ^| findstr /c:"%%a %%b"') do echo %%x ) pause
方案说明
核心思路是利用tzutil /l的输出格式(每条记录为(UTC±XX:XX) 时区显示名称 时区ID),直接用findstr精准匹配当前时区ID,再通过delims=()分割字符串,一次性提取出括号内的时区显示名称,省去了原脚本里启用延迟变量、循环内多次判断的步骤,代码更短也更好读。
备注:内容来源于stack exchange,提问作者Mr.Key7
相关产品推荐
相关产品推荐

