2011-01-12 125 views
1

有人可以建議一個腳本來重命名Windows子目錄中的一堆文件,這些文件名具有帶下劃線的空格。例如,如果文件名是用於重命名Windows子目錄中的文件的腳本

abc xyz.pdf 

應該

abc_xyz.pdf 
+0

是否需要遞歸到子目錄的子目錄中? – Casey 2011-01-12 04:33:31

+0

是的遞歸到一個目錄 – iceman 2011-01-12 06:48:18

+0

如果任何子目錄名稱中有空格,會發生什麼?保持原樣?或重命名?如果重命名,我認爲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 2011-01-12 13:20:11

回答

1

Perl:使用File::Find對文件進行遞歸查找和操作。

請注意,您需要小心:不要重命名具有下劃線的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? 
} 
0

下面的批處理文件沒有測試,但應該工作。

@echo off 
for %%i in (*) do call :rename "%%~ni" 
goto :EOF 

:rename 
set filename=%1 
set newname=%filename: =_% 
rename "filename" "newname" 
0

這是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 
0

我還在學習PERL所以參加了這個刺...

opendir (curDir, "."); 

@filesWithSpaces = grep(/.*\s.*\..*/, readdir (curDir)); 

foreach $oneFile (@filesWithSpaces){ 
    $newName = $oneFile; 
    $newName =~ s/\ /_/g; 
    print "RENAMING: $oneFile -> $newName \n"; 
    rename($oneFile, $newName); 

}

看起來我最初的測試罰款。它不是遞歸的。

0

這是一個有效的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 
相關問題