【问题标题】:How to use a substring in for loop of batch script?如何在批处理脚本的for循环中使用子字符串?
【发布时间】:2018-08-08 05:05:14
【问题描述】:

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

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
)

那么,我该怎么做呢?

【问题讨论】:

  • 您应该会收到一条错误消息。要在批处理文件中使用,请使用 %%G 而不是 %Gset filInp="%G" 应该是 set "filInp=%%G"
  • rem 在字符串中间不起作用
  • 好的,我使用 %%G 更改了批处理脚本,它现在似乎可以工作了。我实际上首先尝试过,但我认为我使用 % 而不是 !对于 doy 变量。 (然后我之前将代码复制到 cmd 窗口以查看错误输出并使用 %G,但忘记了)。谢谢!

标签: batch-file for-loop substring


【解决方案1】:

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

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

我还关闭了SETLOCAL EnableDelayedExpansion by 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
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多