批量添加 basename 到另一个文件
Batch add basename to another file
我搞砸了 mmv,删除了文件夹中文件名末尾的几个字符(在扩展名之前)。
幸运的是我有其他文件具有相同的原始基本名称但具有不同的扩展名。
我想知道有没有办法做一个循环:
- 将修改后的文件中基本名称的其余部分匹配到具有原始文件名的第二个文件。
- 如果匹配,用原来的文件名重命名文件
示例:
Wrong filenames: foo-1234.txt
foo-1225.txt
Right files: foo-1234-5678.png
foo-1225-6789.png
期望的输出:
foo-1234-5678.txt
foo-1225-6789.txt
非常感谢您!
你没有提到我们在谈论什么环境,但我假设它是 Windows cmd。你可以试试这个:
@echo off
setlocal enabledelayedexpansion
for %%f in (foo-*.png) do set f=%%f & rename !f:~0,8!.txt !f:~0,13!.txt
它必须从批处理文件中执行 - 延迟扩展在直接命令行中不起作用。
编辑
powershell 对应物:
dir foo-*.png | % { $stem = $_.name -replace 'foo-([^.]+).png',''; $bad = $stem.substring(0,4); mv foo-$bad.txt foo-$stem.txt; }
bash:
for file in foo-*.png; do stem=${file:4:9}; bad=${file:4:4}; mv foo-${bad}.txt foo-${stem}.txt; done
我搞砸了 mmv,删除了文件夹中文件名末尾的几个字符(在扩展名之前)。
幸运的是我有其他文件具有相同的原始基本名称但具有不同的扩展名。 我想知道有没有办法做一个循环:
- 将修改后的文件中基本名称的其余部分匹配到具有原始文件名的第二个文件。
- 如果匹配,用原来的文件名重命名文件
示例:
Wrong filenames: foo-1234.txt
foo-1225.txt
Right files: foo-1234-5678.png
foo-1225-6789.png
期望的输出:
foo-1234-5678.txt
foo-1225-6789.txt
非常感谢您!
你没有提到我们在谈论什么环境,但我假设它是 Windows cmd。你可以试试这个:
@echo off
setlocal enabledelayedexpansion
for %%f in (foo-*.png) do set f=%%f & rename !f:~0,8!.txt !f:~0,13!.txt
它必须从批处理文件中执行 - 延迟扩展在直接命令行中不起作用。
编辑
powershell 对应物:
dir foo-*.png | % { $stem = $_.name -replace 'foo-([^.]+).png',''; $bad = $stem.substring(0,4); mv foo-$bad.txt foo-$stem.txt; }
bash:
for file in foo-*.png; do stem=${file:4:9}; bad=${file:4:4}; mv foo-${bad}.txt foo-${stem}.txt; done