Windows批处理:在对每个文件执行操作时迭代文件名?

时间:2016-03-02 17:41:18

标签: loops batch-file

目前我的循环读取包含的文件(以.al结尾)。 但是当我尝试设置/更改文件名时,它只是跳到最终文件并与之合作。 (xxx.al) 我试图使用EnableDelayedExpansion但仍然无法解决。 最终输出应如下

spconv -if raw -of wav abc.al abc.wav
spconv -if raw -of wav def.al def.wav

但不是只有xxx.al文件,所有包含的文件都应该迭代完毕。即

@echo off

for %%d in (*.al) do (
set str=%%d
set string=%%d:C:\test\test\=%
set string2=%string:.al=%
spconv -if raw -of wav %string% %string2%.wav
)

当前批处理命令如下

{{1}}

2 个答案:

答案 0 :(得分:2)

for %%d in (*.al) do spconv -if raw -of wav %%d %~nd.wav

请参阅for /? - 尤其是最后一部分。

答案 1 :(得分:0)

命令行中的

for /?提供了有关此语法的帮助。

  

另外,替换FOR   变量引用已得到增强。   您现在可以使用以下可选项   语法:

%~I         - expands %I removing any surrounding quotes (")
%~fI        - expands %I to a fully qualified path name
%~dI        - expands %I to a drive letter only
%~pI        - expands %I to a path only
%~nI        - expands %I to a file name only
%~xI        - expands %I to a file extension only
%~sI        - expanded path contains short names only
%~aI        - expands %I to file attributes of file
%~tI        - expands %I to date/time of file
%~zI        - expands %I to size of file
%~$PATH:I   - searches the directories listed in the PATH
               environment variable and expands %I to the
               fully qualified name of the first one found.
               If the environment variable name is not
               defined or the file is not found by the
               search, then this modifier expands to the
               empty string
     

修饰符可以合并得到   复合结果:

%~dpI       - expands %I to a drive letter and path only
%~nxI       - expands %I to a file name and extension only
%~fsI       - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
               environment variable for %I and expands to the
               drive letter and path of the first one found.
%~ftzaI     - expands %I to a DIR like output line
     

在上面的例子中,%I和PATH可以   被其他有效值替换。   %〜语法由有效终止   FOR变量名。采摘大写   像%I这样的变量名称使它更多   可读并避免与...混淆   修饰符,不是这种情况   敏感。

您可以使用不同的字母,例如f表示“完整路径名称”,d表示驱动器号,p表示路径,可以组合使用。 %~是每个序列的开头,数字I表示它适用于参数%I(其中%0是批处理文件的完整名称,就像你假设)。

在批处理文件中,您应该写%%I而不是%I来逃避% 字符。

你的批次看起来像这样:

@echo off
for %%I in (*.al) do spconv -if raw -of wav %%I %~nI.wav
Pause