如何批量重命名从 OSX 复制到 Windows 且文件名中带有‘:’的文件?

如何批量重命名从 OSX 复制到 Windows 且文件名中带有‘:’的文件?

这真是令人费解。我有很多视频是用 Mac OS 存储的,现在我必须在 Windows XP 上编辑它们。我使用 HFSExplorer 复制了文件。编辑软件拒绝以当前名称打开文件,到目前为止我还没有找到批量重命名所有文件的方法。

文件的名称如下所示:

剪辑-2009-10-01 21;26;00.mov

但我怀疑在 OSX 中时间是 21:26:00。

我想用下划线代替空格,用破折号代替分号。

我尝试过几个批量重命名应用程序,使用 ; 和 :,但都失败了。我也尝试过 rename.pl,但同样失败了。

答案1

更新

我们假设“clip-2009-10-01 21;26;00.mov”不是实际文件名;一种可能性是实际文件名是“clip-2009-10-01 21:26:00.mov”。但是,我们无法在 Windows 下验证这一点。

我们也许不需要。


故障安全方法

启动 Linux LiveCD。Ubuntu 9.04 具有良好的 NTFS 支持,并且 Linux 比 Windows 能够处理更多文件名中的奇怪字符。perl 重命名脚本可能包含在系统的重命名命令中。


这有可能-实际上-工作批处理方法(新脚本!)

DOS 命令 DIR/X 显示短文件名,如果它们存在于您的系统中

$ cmd
c:\test> dir /x
 Volume in drive E is NUVOL
 Volume Serial Number is 80D3-A96D

 Directory of e:\tor\test

10/04/2009  05:15 AM    <DIR>                       .
10/04/2009  05:15 AM    <DIR>                       ..
10/04/2009  05:11 AM                 0 CLIP-2~1.MOV clip-2009-10-01 21;26;00.mov
               1 File(s)              0 bytes
               2 Dir(s)   5,201,670,144 bytes free

如果它们确实存在,REN 命令会将它们移动到新名称;新名称可以是新的(有效的)长文件名。

c:\test> ren CLIP-2~1.MOV "clip-2009-10-01_21-26-00.mov"

这就是修复方法。

要批量处理所有这些文件,您需要 1) 获取要移动的所有文件的列表;2) 运行一个简短的 perl 脚本,使用适当的 REN 命令将您的列表转换为批处理文件;3) 运行生成的批处理脚本。

c:\test> dir /x > mybrokenfiles.lst  
$ cat mybrokenfiles.lst | perl -lne 'next if not /MOV/; s/^.{1,39}//; s/^/ren /; s/ (\d\d);(\d\d);(\d\d)/_$1-$2-$3/; print' > fixmybrokenfiles.bat  
c:\test> fixmybrokenfiles.bat  

perl 命令行假定一种非常特殊的输入格式,因此如果 DOS 列表显示长文件名不是“21;26;00.mov”格式,它可能不会完全按照您的要求执行。如果您尝试执行,请在运行批处理脚本之前仔细检查它是否正确。

如果您熟悉 perl(或 sed/awk、python 等),您可以自己编写脚本。但如果 DIR/X 不显示短文件名,则您的系统已禁用它们,并且此解决方案无济于事。


原始答案:就我们现在所知,这没什么用,但如果您再次从 OSX 复制此类文件,则可以在复制之前使用它作为预防步骤。

我在 Windows 和 Linux 系统上都经常使用命令行。互联网上流传着一个方便的 perl 脚本,它允许使用标准 perl 正则表达式批量重命名文件(在 Google 上搜索 rename.pl 即可找到它)。

在 Windows 上的 Cygwin 下,在文件所在的目录中使用以下命令重命名它们:

$ ls
clip-2009-10-01 21;26;00.mov

$ rename.pl 'tr/ ;/_-/;' * 
$ ls
clip-2009-10-01_21-26-00.mov

很确定我的版本来自Perl 食谱

#!/usr/bin/perl -w
# rename - Larry's filename fixer
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV) {
    $was = $_;
    eval $op;
    die $@ if $@;
    rename($was,$_) unless $was eq $_;
}

答案2

查看重命名主文件,它有多种批量操作文件名的方法。您将需要查看代替标签。

替代文本

Rename Master 是免费软件。

答案3

卢帕斯改名是一款免费软件程序,用于重命名大量文件。它适用于 Win95、Win98、WinME、WinNT、Win2K 和 WinXP。它是一个简单的 .EXE 文件,不需要任何其他外部库。

以下是一些特点:

  • 重命名文件和文件夹
  • 重命名递归子目录中的文件
  • Shell 集成(右键单击资源管理器中的文件夹以启动该文件夹上的 LupasRename)
  • 即时预览(可选)
  • 撤消上次重命名操作
  • 创建批处理文件以从 DOS 控制台重命名
  • 从 DOS 控制台创建用于 UNDO 操作的批处理文件
  • 保存并将选项加载到 INI 文件中
  • 按任意掩码过滤:.mp3;.mp2 或 ???a*.txt...
  • 使用 Matchcase 可选方法将子字符串替换为其他子字符串
  • 在扩展中用 Matchcase 可选方法将子字符串替换为其他字符串

替代文本

答案4

总指挥官包括一个名为 Multi-Rename Tool 的批量重命名工具(默认快捷键是 Ctrl+M)。

在您的情况下,您可以通过运行两次过程来重命名文件,一次替换空格,一次替换分号。

另一种方法是使用重命名掩码 - 选择空格前的范围,添加下划线,然后选择空格后的范围,同时使用搜索和替换将分号替换为破折号。

相关内容