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

Batch file 将月份作为数字写入txt文件的批处理,batch-file,Batch File,我需要一个批处理文件,当运行它保存当前月份作为一个数字到一个文本文件 ie;如果是四月,则将04保存到month.txt 此外,它还必须覆盖文件中已有的任何其他文本 ie;而不是文本最终看起来像这样: 04 04 04 04 -它只显示了最近的'04'。此外,不应添加其他空格或换行符。只是04(不多也不少) 提前感谢所有回复者。:) 嗯,(对我来说)不可能不断线,但试试这个: echo %date:~3,2%>expected\destination\filename.txt 这就是我的

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

ie;如果是四月,则将04保存到month.txt

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

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

04

04

04

04

-它只显示了最近的'04'。此外,不应添加其他空格或换行符。只是04(不多也不少)

提前感谢所有回复者。:)

嗯,(对我来说)不可能不断线,但试试这个:

echo %date:~3,2%>expected\destination\filename.txt

这就是我的答案。不管你是否接受,希望它能帮助你

需要完成的任务有以下问题:

  • 以独立于区域设置的方式检索当前月份(日期)
  • 不向输出文件写入(最终)换行符
  • 不修改当前的
    ERRORLEVEL
    状态
我找到了以下解决方案(请参见下面的解释):

set/p
命令实际上是为了提示用户为变量指定一个值。在脚本中,仅使用用户提示文本。与回声不同,显示字符串不包含最终换行符。为了不停止脚本并等待任何用户输入,将通过管道输入一个任意的
echo
字符串。(我使用字符串“u”(
echo
)而不仅仅是换行符(
echo.
),因为后者将
ERRORLEVEL
设置为
1

请注意,
set/p
的变量赋值实际上并不发生在批处理上下文中,因为管道会间歇性地创建新上下文。此外,变量值并不重要,只是用户提示文本。因此,您也可以编写
set/psdummy=
而不是
set/pdat=

set/p
用户提示文本周围需要双引号,以避免返回尾随空格(即使删除了
之前的空格)。我不知道为什么,但我想这可能是由命令行解释器读取重定向
的方式造成的

如果您对
ERRORLEVEL
状态不感兴趣,可以删除
cmd/C
部分,以便只保留括号之间的部分。 但是,如果不希望更改
ERRORLEVEL
状态,请保留
cmd/C
部分,该部分将恢复原始
ERRORLEVEL
状态,因为:

  • 命令解释器在执行任何命令之前读取整行
  • %ERRORLEVEL%
    立即展开,因此存储其执行前的状态
  • 一旦执行
    set/P
    ,实际的
    ERRORLEVEL
    状态将被修改
  • exit%ERRORLEVEL%
    ERRORLEVEL
    状态设置回先前存储的原始状态
  • cmd/C
    环绕
    exit
    命令避免终止当前脚本
不,这是错误的。此外,它还必须覆盖文件中已经存在的任何其他文本。如果
echo off&cls
,则它应该是
@echo off
,因为不需要cls。而且,仍然不需要
cls
。请重读问题。标签是批处理文件,不是cmd。感谢大家这么快的帮助。事实证明sachadee的代码(稍微修改)对我来说最合适。为什么要创建一个新变量?您可以直接使用%date%。事实证明是这样的。很抱歉这么做!
echo %date:~3,2%>expected\destination\filename.txt
@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%