如何以递归方式将目录中的文件名及其扩展名改为小写

如何以递归方式将目录中的文件名及其扩展名改为小写

我知道已经存在类似问题,但它们要么:

  • 抛出文件无法找到的错误
  • 不起作用,或者改为大写

由于声誉较低,我无法在其他已发布的答案中发表评论。

我也不介意它是在目标目录中运行的 .bat 还是直接从命令行运行。我只能在 MS-DOS 中执行基本操作。

到目前为止我可以设置我想要的目录:

x:
cd x:/folder1/folder2/target_folder

我想要的结果是这样的:

some_folder_in_target_folder/IMAGE1.jpg
some_folder_in_target_folder/Second/image1.JPG
some_folder_in_target_folder/Second/IMAGE2.JPG
some_folder_in_target_folder/Second/image3.jpg

显示为:

some_folder_in_target_folder/image1.jpg
some_folder_in_target_folder/Second/image1.jpg
some_folder_in_target_folder/Second/image2.jpg
some_folder_in_target_folder/Second/image3.jpg

我不想修改文件夹名称本身。

这些文件位于 USB 驱动器上。我不知道这是否是导致我在尝试过的其他代码示例中看到的一些错误的原因。

答案1

在这个特殊情况下,我不同意 Seth 和 Luru 的观点,精彩的解决方案有一个小缺陷,这个 cmd 行应该可以解决这个问题(如果输出看起来正确,请删除回显):

For /r X:\Path %A in (.) do @For /f "eol=: delims=" %F in ('dir /l/b/a-d "%A" 2^>NUL') do @Ren "%~fA\%F" "%F"

在一个批次中%必须加倍:

For /r X:\Path %%A in (.) do @for /f "eol=: delims=" %%F in (
  'dir /l/b/a-d "%%A" 2^>NUL'
) do Ren "%%~fA\%%F" "%%F"

相反,批量转换为大写会显得很笨拙。

powershell 解决方案:

Get-ChildItem -Path X:\path -File|
  where-Object {$_.Name -cne $_.Name.ToLower()}|
    Rename-Item -NewName {$_.Name.ToLower()} -confirm

与别名相同,只需一行:

gci -Path X:\path -File|? {$_.Name -cne $_.Name.ToLower()}|Ren -new {$_.Name.ToLower()} -confirm

相关内容