【发布时间】:2017-12-10 17:26:03
【问题描述】:
在我努力理解for..do 循环语法及其对%% 变量的使用中。我已经经历了 2 个具体示例/实现,其中一个 for 循环不使用 DELAYEDEXPANSION,另一个使用 DELAYEDEXPANSION 和 ! 符号。第一个 for 循环似乎与 Windows XP 等旧操作系统兼容,而第二个 for 循环示例则不兼容。
具体来说,第一个 for 循环示例取自 answer(与 this 相关),第二个 for 循环示例是取自answer。
以下复制的两个示例的修改代码:
第一个 for 循环
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%"
set "YYYY=%dt:~0,4%"
set "MM=%dt:~4,2%"
set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%"
set "Min=%dt:~10,2%"
set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%%MM%%DD%"
set "timestamp=%HH%%Min%%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
第二个 for 循环
SETLOCAL ENABLEDELAYEDEXPANSION
set "path_of_folder=C:\folderA\folderB"
for /f "skip=5 tokens=1,2,4 delims= " %%a in (
'dir /ad /tc "%path_of_folder%\."') do IF "%%c"=="." (
set "dt=%%a"
set vara=%%a
set varb=%%b
echo !vara!, !varb!
set day=!vara:~0,2!
echo !day!
)
由于我一直在阅读并看到延迟扩展(或! 表示法)与旧操作系统(例如 Windows XP)不兼容的问题,我想看看 如何编写第二个循环,如第一个循环;即不使用DELAYEDEXPANSION。
【问题讨论】:
-
延迟扩展功能在 Windows XP 下肯定可用。无论如何,为避免这种情况,请使用
call echo %%vara%%, %%varb%%和call set day=%%vara:~0,2%%之类的call语法,或者将循环体移动到 sub-routine 中,通过call调用它,将所有相关值作为 [arguments]( http:ss64.com/nt/syntax-args.html)并在那里使用普通的%-expansion;也参考concept of functions...
标签: windows batch-file windows-xp delayedvariableexpansion