我有一个目录,里面有几个没有文件扩展名的文件。这个目录还有几个子目录,里面有同样的东西。
我正在使用forfiles
命令添加文件扩展名。但是,当我具体使用此命令时:
forfiles /s /c "cmd /c rename @file @fname.ext"
它将扩展名添加到文件旁边的文件夹中。
有没有办法排除子目录本身,只向其中的文件添加扩展名?
答案1
在电源外壳,使用-File
参数Get-ChildItem
仅检索文件。将输出通过管道传输到Where-Object
过滤没有扩展名的文件:
Get-CHildItem -File -Recurse | Where Extension -like ''
管道至Rename-Item
,使用 ScriptBlock 构造新名称:
Get-CHildItem -File -Recurse | Where Extension -like '' |
Rename-Item -NewName { $_.Name + '.ext' }
Key-Banger 版本:
gci -af -recurse | ? Extension -like '' | ren -NewName { $_.Name + '.ext' }
答案2
这可以更快/更简单地完成,使用for
建议的简单方法ss64.com
- 在命令行中:
@for /r %i in (*)do @if "" == "%~xi" @ren "%~dpni" "%~ni.log"
@echo off
for /r %%i in (*)do if "" == "%%~xi" ren "%%~dpni" "%%~ni.log"
- 在目录树中递归循环,仅从以下位置获取文件:
for /r %%i in (*)do
- 如果文件不包含(
""
)扩展名(%%~xi
),则使用以下语法重命名它,提供源的完整路径( )和仅添加所需扩展名的目标"%%~dpni"
名称( ):"%%~ni"
if "" == "%%~xi" ren "%%~dpni" "%~ni.log"
当使用时forfiles
,对于任务中排队的每个文件,都会调用、执行并完成 cmd,这会导致其处理过程中性能/时间的损失。
考虑阅读forfiles
下面链接的限制/错误:
- 对于同样电源外壳文件,您可以使用它回答在这个问题中:
如何使用 PowerShell 选择没有扩展名的文件:
gci -File -Re | ? {!($_.Extension)}
- 此命令返回过滤/递归列表,仅返回符合以下条件的文件:
True
逻辑条件,您的文件中不存在扩展名。
Get-ChildItem -File -Recurse | where-object {!($_.Extension)} | Rename-Item -New {$_.basename+'.log'} -Whatif
- 或者使用别名:
gci -File -Re | ? {!($_.Extension)} | ren -New {$_.basename+'.log'} -Whatif
- 您可以测试,如果结果对您来说似乎不错,只需删除
-Whatif
等待执行……
gci -File -Re | ? {!($_.Extension)} | ren -New {$_.basename+'.log'} -Whatif
进一步阅读:
[√]如果
[√]档案
[√]For 循环
[√]For 循环
[√]Get-Content | cat (参考
PowerShell
:)