目前我的循环读取包含的文件(以.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}}
答案 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