ファイル名にアンダースコアを含むファイル名を持つWindowsサブディレクトリのファイルの名前を変更するスクリプトを提案することができます。ファイル名はWindowsサブディレクトリ内のファイルの名前を変更するスクリプト
abc xyz.pdf
ある場合たとえば、これは、次のバッチファイル
abc_xyz.pdf
ファイル名にアンダースコアを含むファイル名を持つWindowsサブディレクトリのファイルの名前を変更するスクリプトを提案することができます。ファイル名はWindowsサブディレクトリ内のファイルの名前を変更するスクリプト
abc xyz.pdf
ある場合たとえば、これは、次のバッチファイル
abc_xyz.pdf
Perl:ファイルの再帰的な検索と処理にはを使用してください。
次の点に注意する必要があるので注意してください。アンダースコアのDIRECTORIESの名前を変更しないでください。したがって、File::Basename
。
use File::Find;
use File::Basename;
use File::Spec;
use strict;
find ({ 'wanted' => \&renamefile }, 'X:\my\sub\dir');
sub renamefile {
my $file = $_;
return unless (-f $file); # Don't rename directories!
my $dirname = dirname($file); # file's directory, so we rename only the file itself.
my $file_name = basename($file); # File name fore renaming.
my $new_file_name = $file_name;
$new_file_name =~ s/ /_/g; # replace all spaces with underscores
rename($file, File::Spec->catfile($dirname, $new_file_name))
or die $!; # Error handling - what if we couldn't rename?
}
する必要がありますテストされていませんが、動作するはずです。
@echo off
for %%i in (*) do call :rename "%%~ni"
goto :EOF
:rename
set filename=%1
set newname=%filename: =_%
rename "filename" "newname"
ここにはVBScriptスクリプトがあります。これは、フォルダCにファイルの名前を変更します:\テスト
Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("C:\Test") Set fc = f.Files For Each f1 in fc f1.move f1.ParentFolder & "\" & replace(f1.Name, " ", "_") Next
は、イムはまだPERLはので、この中で刺しを取った...
opendir (curDir, ".");
@filesWithSpaces = grep(/.*\s.*\..*/, readdir (curDir));
foreach $oneFile (@filesWithSpaces){
$newName = $oneFile;
$newName =~ s/\ /_/g;
print "RENAMING: $oneFile -> $newName \n";
rename($oneFile, $newName);
}
を学ぶことは、私の最初のテストで正常に見えます。しかし、再帰的ではありません。
これには、DIRECTORY名のスペースの名前を変更するなど、いくつかのエラーがあります。 – DVK
ここには動作するVBScriptがあります。しかし、指定されたディレクトリのサブディレクトリには再帰しません。
Dim fso
Dim folder
Dim stringToFind
Dim replacement
' Check arguments
If Wscript.Arguments.Count <> 3 Then
' Usage
Wscript.echo "Usage: rename.vbs folder string_to_find replacement"
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(WScript.Arguments(0))
If Err.Number <> 0 Then
WScript.Echo "Folder " & WScript.Arguments(0) & " does not exist."
WScript.Quit
End If
stringToFind = WScript.Arguments(1)
replacement = WScript.Arguments(2)
For Each file in folder.Files
fso.MoveFile file.ParentFolder & "\" & file.Name, file.ParentFolder & "\" & Replace(file.Name, stringToFind, replacement)
Next
Set folder = Nothing
Set fso = Nothing
サブディレクトリのサブディレクトリに再帰する必要はありますか? – Casey
ディレクトリへの再帰 – iceman
サブディレクトリ名にスペースが含まれているとどうなりますか?そのまま残す?または名前を変更しますか?名前を変更した場合、PARENTディレクトリの名前を変更しないでください。例えば。 'C:\ my docs \ pdfs'で始まり、' C:\ my docs \ pdfs \ sci fi \ star wars1.pdf'ファイルを持っていれば、 'C:\ my docs \ pdfs \ sci fi \ star_wars1.pdf'、 'C:\ my docs \ pdfs \ sci_fi \ star_wars1.pdf'、または' C:\ my_docs \ pdfs \ sci_fi \ star_wars1.pdf'のいずれかです。私は#1と仮定しています。 – DVK