【问题标题】:Passing a truncated filename to another batch file将截断的文件名传递给另一个批处理文件
【发布时间】:2020-10-07 16:09:58
【问题描述】:

我在一个名为 cores 的文件夹中有一堆文件。这些文件的名称有 c_000223~a、c_120302~a 等。

我有一个带有 for 循环的批处理文件。它应该遍历每个核心文件并将其发送到另一个名为 RunMSFlux 的批处理文件进行处理。问题是 RunMSFlux 不接受它们的核心文件名。它不想要'c_'开头,只需要000223~a、120302~a等。

我无法修改 RunMSFlux 以接受“c_”,因为它是只读的。另外,我不想重命名核心文件,因为它们被我的批处理文件之外的其他程序使用。所以我需要一种方法来去除文件名开头的 c_,然后将其传递给 RunMSFlux。

到目前为止,这是我的批处理文件:

    @echo on
    set bindirectory=K:\Physics\bin\1112\
    set coredirectory=K:\Physics\cores\
    set quiet=yes

for %%f in ( %coredirectory%* ) do (

    call %bindirectory%\RunMSFlux.bat %%f measbu measbu
)

有没有办法让批处理文件在将文件名传递给 for 循环之前先去掉 c_ ?或者也许我可以创建一个 .txt 文件,其中包含被截断的核心文件的名称,并让脚本逐行遍历它并将这些名称传递给 for 循环?

【问题讨论】:

  • 更改为使用FOR /F 来捕获DIR 命令的输出,并使用TOKENSDELIMS 选项和FOR /F 来拆分文件名。跨度>
  • for 循环中放置另一个循环,例如 for /F"tokens=1* delims=_ eol=_" %%g in ("%%~nxf") do,然后将 call 命令行放入该循环并将 %%f 替换为 %%h...
  • 我收到一条错误消息“命令的语法不正确。” for /F "tokens=1* delims=_ eol=_" %g in ("%~nxf") do 我的批处理文件现在看起来像:` for %%f in (%coredirectory%*) do (` for / F "tokens=1* delims=_ eol=_" %%g in ("%%~nxf")) do ` ` ( call %bindirectory%RunMSFlux.bat %%h measbu measbu )
  • 如果您确定 c_ 不会出现在文件名中的其他任何位置,您可以使用字符串替换。 ***set truncated_file=%%f *** 然后传递 *** %truncated_file:c_=% *** 而不是 %%f。这将剥离 c_。
  • ("%%~nxf") 部分到底是做什么的?我不断收到语法错误。如果我创建一个包含所有核心名称的单独文本文件,例如。核心文件.txt;并将其放在一个循环中,然后它就可以工作了。 set bindirectory=K:\NRU_Physics\Triad3PC\bin\1112\ set coredirectory=K:\NRU_Physics\Triad3PC\cores\ set quiet=yes for /F "tokens=1* delims=_ eol=_" %%g in ( corefiles.txt) 做 (调用 %bindirectory%RunMSFlux.bat %%h measbu measbu)

标签: windows for-loop batch-file cmd file-rename


【解决方案1】:

在哭泣和咬牙切齿之后,我相信我终于找到了可行的方法:

@echo on
set bindirectory=K:\Physics\bin\1112\
set coredirectory=K:\Physics\cores\
set quiet=yes

for /F "tokens=1* eol=_ delims=_" %%g in ( 'dir /A:-d /B %coredirectory%' ) do (

call %bindirectory%RunMSFlux.bat %%h measbu measbu 
)

在将截断的文件名传递给循环内的 RunMSFlux.bat 之前,标记、eol 和 delims 会去除 'dir /A:-d /B' 列出的文件名中的 c_。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2012-07-17
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多