批量添加 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