如何将确切的代码保存到文本文件中。喜欢 %date%
How can save the exact code to text file. like %date%
使用这种方式创建文本文件,但在结果中执行一些代码
此代码要保存:
>> sina2.txt echo SET TodayYear=^%DATE:~10,4^%
>> sina2.txt echo SET TodayMonth=%DATE:~4,2%
>> sina2.txt echo SET TodayDay=%DATE:~7,2%
>> sina2.txt echo IF %MyDate% GTR %TodayYear%-%TodayMonth%-%TodayDay% (
>> sina2.txt echo ECHO MyDate is Bigger Do Nothing.
结果与代码不同。 “我想要一封一封的信”
SET TodayYear=2022
SET TodayMonth=02
SET TodayDay=03
IF GTR -- (
ECHO MyDate is Bigger Do Nothing.
想要这样的结果:
SET TodayYear=%DATE:~10,4%
SET TodayMonth=%DATE:~4,2%
SET TodayDay=%DATE:~7,2%
IF %MyDate% GTR %TodayYear%-%TodayMonth%-%TodayDay% (
ECHO MyDate is Bigger Do Nothing.
您通常会将百分比字符加倍,有点像这样:
1>"sina2.txt" (
Echo Set "Today=%%DATE%%"
Echo Set "TodayYear=%%Today:~-4%%"
Echo Set "TodayMonth=%%Today:~-10,2%%"
Echo Set "TodayDay=%%Today:~-7,2%%"
Echo If %%MyDate%% GTR %%TodayYear%%-%%TodayMonth%%-%%TodayDay%% (
Echo ECHO MyDate is Bigger Do Nothing.
Echo ^)
)
您应该注意,由于我已经将整个块括起来,因此内部右括号需要使用脱字符号进行转义。此外,我只使用了一次动态变量 %DATE%
,然后使用它的静态值作为其他值的基础(这可以防止日期翻转问题)。另外需要注意的是你没有定义%MyDate%
所以你写的内容不完整
在你要写的行前面加上::::
1,然后用findstr
to filter them out from the batch file, for /F
to capture the resulting lines and sub-string substitution2删除前缀 ::::
:
@echo off
> "%~dp0sina2.txt" (
for /F "tokens=* delims=" %%B in ('findstr "^::::" "%~f0"') do (
set "LINE=%%B"
setlocal EnableDelayedExpansion
echo(!LINE:*::::=!
endlocal
)
)
exit /B
::::SET TodayYear=%DATE:~10,4%
::::SET TodayMonth=%DATE:~4,2%
::::SET TodayDay=%DATE:~7,2%
::::IF %MyDate% GTR %TodayYear%-%TodayMonth%-%TodayDay% (
::::ECHO MyDate is Bigger Do Nothing.
使用这种方法,目标行永远不会通过命令解释器,因此不会发生变量扩展或特殊字符识别。
Delayed variable expansion 在循环中切换,以免 运行 出现感叹号问题。
1) 由于 :
引入了一个跳转标签,因此选择了前缀 ::::
(参见 goto
), ::
marks an invalid label often used as a comment,也许还有当前脚本,并且 ::::
仍然是一个无效的评论,虽然不常见并且很少(或者希望永远不会)使用。
2) Sub-string 循环中的替换和相应的延迟扩展的需要在使用 for /F "tokens=1* delims=:" %%A in ('findstr "^::::" "%~f0"') do echo(%%B
时可以避免,但这会忽略 all 前导冒号。
使用这种方式创建文本文件,但在结果中执行一些代码
此代码要保存:
>> sina2.txt echo SET TodayYear=^%DATE:~10,4^%
>> sina2.txt echo SET TodayMonth=%DATE:~4,2%
>> sina2.txt echo SET TodayDay=%DATE:~7,2%
>> sina2.txt echo IF %MyDate% GTR %TodayYear%-%TodayMonth%-%TodayDay% (
>> sina2.txt echo ECHO MyDate is Bigger Do Nothing.
结果与代码不同。 “我想要一封一封的信”
SET TodayYear=2022
SET TodayMonth=02
SET TodayDay=03
IF GTR -- (
ECHO MyDate is Bigger Do Nothing.
想要这样的结果:
SET TodayYear=%DATE:~10,4%
SET TodayMonth=%DATE:~4,2%
SET TodayDay=%DATE:~7,2%
IF %MyDate% GTR %TodayYear%-%TodayMonth%-%TodayDay% (
ECHO MyDate is Bigger Do Nothing.
您通常会将百分比字符加倍,有点像这样:
1>"sina2.txt" (
Echo Set "Today=%%DATE%%"
Echo Set "TodayYear=%%Today:~-4%%"
Echo Set "TodayMonth=%%Today:~-10,2%%"
Echo Set "TodayDay=%%Today:~-7,2%%"
Echo If %%MyDate%% GTR %%TodayYear%%-%%TodayMonth%%-%%TodayDay%% (
Echo ECHO MyDate is Bigger Do Nothing.
Echo ^)
)
您应该注意,由于我已经将整个块括起来,因此内部右括号需要使用脱字符号进行转义。此外,我只使用了一次动态变量 %DATE%
,然后使用它的静态值作为其他值的基础(这可以防止日期翻转问题)。另外需要注意的是你没有定义%MyDate%
所以你写的内容不完整
在你要写的行前面加上::::
1,然后用findstr
to filter them out from the batch file, for /F
to capture the resulting lines and sub-string substitution2删除前缀 ::::
:
@echo off
> "%~dp0sina2.txt" (
for /F "tokens=* delims=" %%B in ('findstr "^::::" "%~f0"') do (
set "LINE=%%B"
setlocal EnableDelayedExpansion
echo(!LINE:*::::=!
endlocal
)
)
exit /B
::::SET TodayYear=%DATE:~10,4%
::::SET TodayMonth=%DATE:~4,2%
::::SET TodayDay=%DATE:~7,2%
::::IF %MyDate% GTR %TodayYear%-%TodayMonth%-%TodayDay% (
::::ECHO MyDate is Bigger Do Nothing.
使用这种方法,目标行永远不会通过命令解释器,因此不会发生变量扩展或特殊字符识别。
Delayed variable expansion 在循环中切换,以免 运行 出现感叹号问题。
1) 由于 :
引入了一个跳转标签,因此选择了前缀 ::::
(参见 goto
), ::
marks an invalid label often used as a comment,也许还有当前脚本,并且 ::::
仍然是一个无效的评论,虽然不常见并且很少(或者希望永远不会)使用。
2) Sub-string 循环中的替换和相应的延迟扩展的需要在使用 for /F "tokens=1* delims=:" %%A in ('findstr "^::::" "%~f0"') do echo(%%B
时可以避免,但这会忽略 all 前导冒号。