如何将确切的代码保存到文本文件中。喜欢 %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 前导冒号。