【发布时间】: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命令的输出,并使用TOKENS和DELIMS选项和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