Скрипт для переименования файлов в подкаталоге Windows - PullRequest
1 голос
/ 12 января 2011

Может кто-нибудь предложить сценарий для переименования группы файлов в подкаталоге Windows с именами файлов с пробелами, подчеркивающими их. Например, если имя файла

abc xyz.pdf

должно быть

abc_xyz.pdf

Ответы [ 5 ]

1 голос
/ 12 января 2011

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 голосов
/ 12 января 2011

Вот рабочий 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
0 голосов
/ 12 января 2011

Вот скрипт VBSCript. Переименует файлы в папке C: \ Test

   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 голосов
/ 12 января 2011

Я все еще изучаю 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 голосов
/ 12 января 2011

Следующий пакетный файл не проверен, но должен работать.

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

:rename
set filename=%1
set newname=%filename: =_%
rename "filename" "newname"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...