web-dev-qa-db-ja.com

ファイル名に「:」を付けてOSXからWindowsにコピーしたファイルの名前を一括変更するにはどうすればよいですか?

これは本当に不可解です。 Mac OSを使用して保存されたビデオがたくさんあるので、WindowsXPで編集する必要があります。 HFSExplorerを使用してファイルをコピーしました。編集ソフトウェアは現在の名前でファイルを開くことを拒否します、そして今のところ私はすべてのファイルの名前をバッチで変更する方法を見つけていません。

ファイルの名前は次のようになります。

クリップ-2009-10-0121; 26; 00.mov

しかし、OSXでは21:26:00だったと思います。

スペースをアンダースコアに、セミコロンをダッシュ​​に置き換えたいと思います。

;を使用して、いくつかの一括名前変更アプリケーションを試しました。と:、しかし無駄です。また、rename.plを試しましたが、無駄でした。

3
tputkonen

更新

「clip-2009-10-0121; 26; 00.mov」は実際のファイル名ではないことを前提としています。 1つの可能性は、実際のファイル名が「clip-2009-10-0121:26:00.mov」であるということです。ただし、Windowsでは確認できません。

する必要はないかもしれません。


フェイルセーフメソッド

LinuxLiveCDを起動します。 Ubuntu 9.04は優れたNTFSサポートを備えており、LinuxはWindowsよりもはるかに多くのファイル名の不安定な文字を処理します。 Perlの名前変更スクリプトは、システムの名前変更コマンドとして含まれている場合があります。


This-Might-Actually-Work Ba​​tch Method(New Script!)

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つを修正する方法です。

それらすべてをバッチ処理するには、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 Cookbook から来たことはかなり確かです:

#!/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 $_;
}
4
quack quixote

Rename Master をチェックしてください。ファイル名をバッチで操作する方法は無数にあります。 replaceタブを確認することをお勧めします。

alt text

名前の変更マスターはフリーウェアです。

2
John T

Lupas Rename は、多数のファイルの名前を変更するために開発されたフリーウェアプログラムです。 Win95、Win98、WinME、WinNT、Win2K、WinXPで動作します。これは単純な.EXEファイルであり、他の外部ライブラリは必要ありません。

ここにいくつかの機能があります:

  • ファイルとフォルダの名前を変更する
  • 再帰的なサブディレクトリ内のファイルの名前を変更する
  • シェル統合(エクスプローラーでフォルダーを右クリックして、これらのフォルダーでLupasRenameを開始します)
  • インスタントプレビュー(オプション)
  • 最後の名前変更操作を元に戻す
  • DOSコンソールから名前を変更するバッチファイルを作成します
  • DOSコンソールからUNDO操作用のバッチファイルを作成する
  • オプションを保存してINIファイルにロードする
  • 任意のマスクでフィルタリング:。mp3;。mp2または??? a * .txt .. ..
  • 部分文字列をMatchcaseオプションで他のものに置き換えます
  • 部分文字列を他の部分文字列に置き換えます。拡張子はMatchcaseオプションです。

alt text

1
harrymc

これは、MacまたはLinuxで実行してください。これにより、すべてのファイルとフォルダーの名前が:から-に変更されます。

find . -depth -exec rename 's/:/-/g' * {}\;
1
patrick

他のいくつかのソリューションと同様に、 Bulk Rename Utility はその仕事をするユーティリティです。バルクファイルの名前変更のニーズに非常に便利で使いやすいと思います。

0
Bonus

ファイルのアクセス許可は何ですか?名前を変更する権限がありますか?そうでない場合は、ファイルの所有権を取得して再試行してください。

0
MDMarra

ファイル名に奇妙で目に見えない文字が含まれているという仮定の下で、続行する方法は、古い8.3形式のDOS名を使用することです。これらの名前を見つけるには、-xパラメーターを使用します。

image

次に、短い名前を使用してファイルの名前を変更します。

ren CLIP-2~1.MOV "clip-2009-10-01_21_26_00.mov"

コピーアンドペーストを使用してファイルの名前を変更する場合は、奇妙な文字を伝播しないように注意してください。新しい名前に空白文字を残さないでください(実際には空白ではない可能性があるため)。

0
harrymc

Total commander Multi-Rename Toolという名前のバッチ名前変更ツールが含まれています(デフォルトのショートカットはCtrl + Mです)。

あなたの場合、プロセスを2回実行することでファイルの名前を変更できます。1回はスペースを置き換え、もう1回はセミコロンを置き換えます。

もう1つの方法は、名前変更マスクを使用することです。スペースの前に範囲を選択し、アンダースコアを追加してから、スペースの後に範囲を追加し、検索と置換を使用してセミコロンをダッシュ​​に置き換えます。

0
T. Kaltnekar

私自身、@ 〜quackの答えが好きです。 +1。

しかし、後世のために、これが私が投稿しようとしていたものです。

私はStefanのツールでStExBarをしばらく使用しています。これは、いくつかの便利な機能を備えたツールバーをWindowsエクスプローラーに追加します。

http://tools.tortoisesvn.net/

(彼はいくつかのツールを持っていますが、この特定のツールはStExBarです)

2つの簡単なコマンドで、要求された名前変更を実行できます。これは最初のスクリーンショットで、名前が変更されているファイルのプレビューと、ファイルの名前が変更される内容を示しています。

enter image description here

0
JMD

興味深い問題。

独自のカスタムスクリプトを作成できます。これが機能する1つのスクリプトです。すべてのコロン、セミコロン、スペースをアンダースコアで置き換えます。ファイルはE:/にあり、名前はclip * .movのパターンに従っていると仮定します。スクリプト内のこの値を正しい値に変更できます。必要に応じて、スクリプトをさらにカスタマイズできます。

# Script Mac2WindowsFileTransfer.txt
# Go to directory where files are stored.
cd "E:/"                                     ### CHANGE THIS TO YOUR CORRECT VALUE. ###
# Get a list of clip*.mov files.
var str list ; lf -rng "clip*.mov" > $list   ### CHANGE THIS TO YOUR CORRECT VALUE. ###
# Go thru files one by one.
while ($list <> "")
do
    # Get the next file.
    var str file
    Lex "1" $list > $file
    # Create the new name.
    var str newname
    stex -p "^/^l[" $file > $newname
    # REPLACE ALL COLONS, SEMICOLONS,  SPACES WITH UNDERSCORE.
    while ( { sen -r "^(\:\; )^" $newname } > 0 )
        sal -r "^(\:\; )^" "_" $newname
    # Rename file.
    system rename ("\""+$file+"\"") $newname
done

スクリプトをC:/Scripts/Mac2WindowsFileTransfer.txtとして保存します。スクリプトはbiterscriptingです( http://www.biterscripting.com )。 biterscriptingは無料でダウンロードできます。 biterscriptingで次のコマンドを入力してを実行します。

script "C:/Scripts/Mac2WindowsFileTransfer.txt"

パトリック

0
PatrickMc

LinuxライブCDを使用して、上記のファイルを含むフォルダーに移動し、次の手順を実行します。

rename -v 's/\:|\*|\?|\"//g' "{}" \; *.mov

これにより、Windowsが望まなかったもののほとんどが削除されます。例えば。

2004-01-02_23:58:22.mpg

となります:

2004-01-02_235822.mpg
0
user36263