简单问题。 IMDU命令是什么?
imdu /b file.imd file.raw
并将file.imd转换为file.raw文件。
我有很多.imd文件,所以需要一个批量处理的方法。我已经尝试过:
for %%x in (*.imd) do imdu /b %%x %%~nx.raw
但是它不能正常工作并创建了一个名为%%.raw的文件。
我需要一个批处理程序,可以删除imd扩展名并将其替换为raw。如何做到这一点?
简单问题。 IMDU命令是什么?
imdu /b file.imd file.raw
并将file.imd转换为file.raw文件。
我有很多.imd文件,所以需要一个批量处理的方法。我已经尝试过:
for %%x in (*.imd) do imdu /b %%x %%~nx.raw
但是它不能正常工作并创建了一个名为%%.raw的文件。
我需要一个批处理程序,可以删除imd扩展名并将其替换为raw。如何做到这一点?
for /?
并仔细完整地阅读输出帮助。其中解释了%~xI
——文件扩展名,以及%~nI
——文件名和%~nxI
——带有扩展名的文件名,请注意,赋给大小写敏感的循环变量I
的字符串实际上无论是一个真正存在的文件还是一个文件夹,或者根本不存在。事实上它可以是任何字符串。%~nI
引用的文件名是从最后一个反斜杠到最后一个点或字符串结束之间的字符串。如果分配给循环变量的字符串以反斜杠结尾,即为文件夹路径,或者文件名以点开头且没有真正的文件扩展名(如UNIX/MAC上的隐藏文件常被命名),则它可以为空字符串。%~xI
引用的文件扩展名是指从最后一个反斜杠后面的最后一个点到字符串末尾的所有内容,该内容被赋给循环变量。因此,%~xI
引用了文件名为.htaccess
的文件的文件名,而不是%~nI
,在这种特殊情况下为空字符串。在UNIX/MAC上,名为.htaccess
的文件实际名称为htaccess
,并且在文件名开头加上.
使得该文件在UNIX/MAC文件系统中被隐藏。
请注意,循环变量区分大小写,而像n
、x
、f
等修饰符则不区分大小写。因此,%~NXI
与%~nxI
相同。通常更易读的做法是将循环变量使用大写字母,将修饰符使用小写字母。
对于读者来说,有时使用既是修饰符又是循环变量的字符会导致混淆,在某些特殊情况下也可能会让cmd.exe
感到困惑,例如在命令行窗口运行以下命令:
for %f in ("1. " "2. " "3. ") do @echo %~ffile
I
不是一个修饰符,因此可以通过在Windows命令提示窗口中运行时使用%I
代替%f
来避免上述命令行输出错误:
for %I in ("1. " "2. " "3. ") do @echo %~Ifile
%~ff
被解释为引用分配给循环变量 f
的字符串的完全限定文件名,而 %~I
被解释为引用去除双引号后分配给循环变量 I
的字符串。ADFNPSTXZadfnpstxz
中的一个作为循环变量,或者至少要小心地使用它们。for %%I in (*.imd) do imdu.exe /b "%%I" "%%~nI.raw"
对于这样简单的循环,使用一个 ASCII 字符也是可能的,并且是一种好的做法,不使用字母或数字,对于 Windows 命令处理器没有特殊含义的字符,例如:
for %%# in (*.imd) do imdu.exe /b "%%#" "%%~n#.raw"
在批处理文件中搜索所有出现的#
比搜索其他字符串中多次存在的字母要容易得多。字符$
也非常适合作为循环变量,因为它通常没有特殊含义,在批处理文件中也通常不存在。
不要忘记在文件名周围加上双引号,因为文件名可能包含空格、圆括号或和符号,这些都需要在文件名周围加上双引号。在此用例中,命令FOR始终使用不带双引号的文件名作为循环变量。
还有一个提示:
使用FOR处理与通配符模式匹配的文件或文件夹,这些文件或文件夹由执行的命令行重命名、移动或删除,对于FAT32和exFAT驱动器来说是有问题的,因为当FOR访问该列表进行循环迭代时,目录条目列表会发生更改。
例如,在当前目录位于FAT32或exFAT驱动器上的批处理文件中,下面的命令行可能会导致临时文件被重命名多次。
for %%# in (*.tmp) do ren "%%#" "%%~n#_1.tmp"
for /F "eol=| delims=" %%# in ('dir *.tmp /A-D /B /ON 2^>nul') do ren "%%#" "%%~n#_1.tmp"
ren *.txt *.c
.txt
是当前文件扩展名,.c
是新的扩展名。* 代表所有文件。
PowerShell
最好使用 Path.ChangeExtension
方法而不是 -replace。
Dir *.txt | rename-item -newname { [io.path]::ChangeExtension($_.name, "c") }
这里所有扩展名为*.txt
的文本文件将被更改为.name
干杯!
*.imd
文件,执行命令imdu /b %%x %%~nx.raw
可以输出正确的结果。顺便说一下,我认为IMDU
命令除了重命名之外还会进行一些额外的内容转换,不是吗? - JosefZ