我需要一个批处理文件,在运行时它将当前月份作为数字保存到文本文件中;
即;如果它是四月,它会将04保存到month.txt。
此外,它必须覆盖文件中已有的任何其他文本。
即;而不是最终看起来像这样的文本:
04
04
04
04
- 只显示最近的' 04'。此外,不应添加额外的空格或换行符。只是04(仅此而已,仅此而已)。
提前感谢任何回复者。 :)
答案 0 :(得分:0)
要完成的任务存在以下问题:
ERRORLEVEL
州; 我找到了以下解决方案(见下面的解释):
@echo off
rem get locale-independent date/time string (YYYYMMDDHHMMSS...) by "WMIC" command;
for /F "tokens=2 delims==" %%I in ('wmic OS GET LocalDateTime /VALUE') do set DAT=%%I
rem the "%DAT:~4,2%" portion extracts the month numeral;
rem instead of just "echo"-ing the month numeral, use "set /P" user prompt text,
rem because this doesn't produce a final line-break unlike "echo" does;
rem then redirect the textual output of this to the text file;
rem since "set /P" modifies the ERRORLEVEL state, let's append the "cmd /C" portion;
(echo _| set /P DAT="%DAT:~4,2%" > month.txt) & cmd /C exit %ERRORLEVEL%
set /P
命令实际上是为了提示用户将值赋给变量。在脚本中,仅使用用户提示文本。与echo
不同,显示字符串不包含最终换行符。为了不停止脚本并等待任何用户输入,管道输入了任意echo
字符串。(我使用字符串" _"(echo _
)而不仅仅是一行 - 中断(echo.
),因为后者将ERRORLEVEL
设置为1
。)
请注意,set /P
的变量赋值实际上不在我们的批处理上下文中发生,因为管道会间歇性地创建新的上下文。此外,无论如何,变量值都不是感兴趣的,只有用户提示文本。所以你也可以写set /P DUMMY=
而不是set /P DAT=
。
需要set /P
用户提示文本周围的双引号,以避免返回尾随空格(即使删除了>
之前的空格)。我不是为什么,但我想这可能是由命令行解释器读取重定向>
的方式引起的。
如果您对ERRORLEVEL
状态不感兴趣,可以删除cmd /C
部分,这样只保留括号之间的部分。
但是,如果您不希望更改ERRORLEVEL
状态,请保留cmd /C
部分,以恢复原始ERRORLEVEL
状态,因为:
%ERRORLEVEL%
已立即扩展,因此会存储执行前的状态; set /P
后,实际的ERRORLEVEL
状态会被修改; exit %ERRORLEVEL%
将ERRORLEVEL
状态设置回先前存储的原始状态; cmd /C
缠绕exit
命令,避免终止当前脚本; 答案 1 :(得分:-1)
@echo off
echo %date:~3,2%>month.txt
答案 2 :(得分:-1)
嗯,(对我而言)不可能不换行,但试试这个:
echo %date:~3,2%>expected\destination\filename.txt
这是我的答案。是否接受,希望它能帮到你!