如何在文本文件中的单个数字日期和时间值上插入前导“零”?

时间:2016-03-29 12:30:22

标签: batch-file

如果下面的txt文件输出中有单个数字日期/时间,任何人都可以帮我如何追加“零”:

C|000001|56600|MMB-W1S0033|R|||||16-3-2|9:35:1|
P|000001|56600|MMB-W1S0033||||||16-3-2|9:35:2|
C|000001|56600|MMB-W1S0210|R|||||16-3-2|9:35:3|
P|000001|56600|MMB-W1S0210||||||16-3-2|9:35:4|

变为低于?

C|000001|56600|MMB-W1S0033|R|||||16-03-02|09:35:01|
P|000001|56600|MMB-W1S0033||||||16-03-02|09:35:02|
C|000001|56600|MMB-W1S0210|R|||||16-03-02|09:35:03|
P|000001|56600|MMB-W1S0210||||||16-03-02|09:35:04|

1 个答案:

答案 0 :(得分:1)

Stack Overflow不是免费的代码编写服务。下次请先亲自尝试一下。

请修改此小批量脚本第三行的文件名和路径。

@echo off
setlocal EnableDelayedExpansion
set "InputFile=C:\Temp\TestFile.txt"
if not exist "%InputFile%" goto :EOF

set "TempFile=%TEMP%\TestFile.tmp"
if exist "%TempFile%" del "%TempFile%"

for /F "usebackq delims=" %%I in ("%InputFile%") do (
    set "Line=%%I"
    if "!Line:~-3,1!"  == ":" set "Line=!Line:~0,-2!0!Line:~-2!"
    if "!Line:~-6,1!"  == ":" set "Line=!Line:~0,-5!0!Line:~-5!"
    if "!Line:~-9,1!"  == "|" set "Line=!Line:~0,-8!0!Line:~-8!"
    if "!Line:~-12,1!" == "-" set "Line=!Line:~0,-11!0!Line:~-11!"
    if "!Line:~-15,1!" == "-" set "Line=!Line:~0,-14!0!Line:~-14!"
    if "!Line:~-18,1!" == "|" set "Line=!Line:~0,-17!0!Line:~-17!"
    echo !Line!>>"%TempFile%"
)

move /Y "%TempFile%" "%InputFile%"
endlocal

此批处理文件只检查相对于行尾的特定位置的字符是否等于比较和预期字符,如果不是这样,则插入前导零,因为行中的位置的日期/时间值右边有只有1位数。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • del /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • move /?
  • set /? ...这里最重要的是了解替换。
  • setlocal /?

另请参阅Microsoft关于Using command redirection operators的文章。