- Jun
- 73
- 2
Some of the users here may find this batch file helpful:
The file "renx.pl" that it calls is below . . .
Hope someone finds this useful !
Eric
Code:
@echo off
:: filename: renx.btm
:: author: Eric Pement
:: Date: Dec. 19, 2003
:: Credit: Tom Christiansen and Nathan Torkington, "Perl Cookbook" (1998), p. 327
switch "%1"
case "" .OR. "-?" .OR. "-h" .OR. "--help"
goto syntax
default
if not exist "c:\bat\lib\renx.pl" (echo File c:\bat\lib\renx.pl not found! %+quit)
:: Let perl process all the filename globbing and all the switches.
perl c:\bat\lib\renx.pl %$
endswitch
goto end
:syntax
TEXT
renX - extended rename, a Perl file renamer
Show "renaming OldName -> NewName" and total # of files renamed
Syntax:
renx [-options] "script" [files morefiles* ...]
Options:
-n Do Nothing. Show what the results would be if files were renamed
-q Quiet mode. Do not display any results to the console
-v Verbose. Display renaming results and command-line arguments
-h,-? Display this help message
Examples:
renx -q "s/\.orig$//" *.orig # cut trailing extension quietly
renx "tr/A-Z/a-z/ unless /^Make/" * # convert to lowercase except ...
renx "$_ .= '.bad'" *.f # append .bad to each file named
renx "s/^(.+)~$/.#$1/" * # del trailing ~ and prepend '.#'
ENDTEXT
:end
The file "renx.pl" that it calls is below . . .
Code:
# filename: renx.pl - Larry Wall's filename fixer
# author: Eric Pement
# date: 2004-09-24
# modified: 2005-08-15
#
# Originally written by Larry Wall. Basic script in Tom Christiansen and
# Nathan Torkington, "Perl Cookbook" (1998), p. 327, to rename files.
# I expanded it to work on a DOS/Windows filesystem, and to support quiet
# and verbose option switches, and totals of files changed. -- ENP.
#
use strict;
use warnings;
use diagnostics;
use Getopt::Std;
use File::DosGlob 'glob';
our($opt_n,$opt_q,$opt_v);
getopts('nqv');
# Foreach character X in the set (nqv), assign $opt_X to 1.
# -n = Do nothing. Don't rename, but show results of proposed action.
# -q = Quiet mode. Do not display any results to the console.
# -v = Verbose. Display renaming prompt and command-line arguments.
# default = display "renaming OldName -> NewName" and total files renamed.
my $op = shift or die `renx --help`; # print help msg from 4DOS parent file
print "Verbose output:\n" if $opt_v;
print " \$op is [$op]\n" if $opt_v;
# create @ARGV from stdin, if necessary
chomp(@ARGV = <STDIN>) unless @ARGV;
# expand the command tail, which may look like "s*.*,*.htm,*.h"
my @filelist = glob("@ARGV");
# remove duplicate files from filelist
my %uniquefiles = ();
foreach my $file (@filelist){
$uniquefiles{$file}++;
}
# revise @filelist to contain only unique, valid filenames
my @uniqfilz = sort keys %uniquefiles;
print " \@ARGV is [@ARGV]\n" if $opt_v;
print " \@filelist is [@filelist]\n" if $opt_v;
print " \@uniqfilz is [@uniqfilz]\n\n" if $opt_v;
# get the longest filename:
my $longest = 0;
for (@uniqfilz) {
$longest = length($_) if length($_) > $longest;
}
# Finally! rename the files, printing the changes unless quelled by -q
# or unless modified by -n
my $sum = 0;
for (@uniqfilz) {
my $was = $_;
eval $op;
die $@ if $@;
unless ($was eq $_) {
printf("renaming %-*s -> %s\n", $longest, $was, $_) unless $opt_q;
rename($was,$_) unless $opt_n;
$sum++;
}
}
print "Total of $sum file" . ($sum==1 ? "" : "s")
. ($opt_n ? " would be" : "" ) . " renamed.\n" unless $opt_q;
print "No files were renamed.\n" if $opt_n;
#---end of script---
Hope someone finds this useful !
Eric