将月份作为数字写入txt文件的批处理

时间:2014-04-06 09:07:18

标签: batch-file

我需要一个批处理文件,在运行时它将当前月份作为数字保存到文本文件中;

即;如果它是四月,它会将04保存到month.txt。

此外,它必须覆盖文件中已有的任何其他文本。

即;而不是最终看起来像这样的文本:

04

04

04

04

- 只显示最近的' 04'。此外,不应添加额外的空格或换行符。只是04(仅此而已,仅此而已)。

提前感谢任何回复者。 :)

3 个答案:

答案 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

这是我的答案。是否接受,希望它能帮到你!