如何在批处理脚本的for循环中使用子字符串?

时间:2018-02-28 10:38:16

标签: batch-file for-loop substring

这是我的第一个批处理脚本。我想转换文件列表并使用输入文件名的子字符串(一年中的某一天)。但是子字符串部分不起作用:

SETLOCAL EnableDelayedExpansion

FOR %G IN (%dirInp%%station%???0.DAT) DO (

SET filInp="%G"

SET doy=!filInp:~-9,3! rem this doesn't work?

rem Convert Trimble GPS receiver observations to RINEX
%dirExe%teqc -tr d %G > %dirOut%%station%!doy!0.%yy%D
)

那么,我应该怎么做呢?

1 个答案:

答案 0 :(得分:0)

除了@Stephan的注释之外,我还更新了您的代码,以使用一些抽象的文件路径和子字符串参数来制作一个最小的工作示例(MWE)。

比起我将SETLOCAL EnableDelayedExpansion移到FOR循环中,现在它在Windows 7上适用于我。

我还通过SETLOCAL EnableDelayedExpansion关闭了endlocal(可能会对进一步的代码执行敏感

@echo off

FOR %%G IN (C:\DirInput_StationA\201901.DAT C:\DirInput_StationB\201812.DAT) DO (
    SETLOCAL EnableDelayedExpansion
    SET "filInp=%%G"

    SET "doy=!filInp:~-10,4!"

    rem Convert Trimble GPS receiver observations to RINEX
    REM Changed your call to echo of the vars
    echo G: "%%G"; doy: "!doy!"
    endlocal
)