BELOW IS A COLLECTION OF MANY MS-DOS FILE-RENAME ROUTINES, from “Experts Exchange“, FOR A VARIETY OF NEEDS.
ALL HERE IN ONE PLACE, FOR YOUR EASE & PLEASURE : )
N o t e s :
– Some code is
condensed using the ‘&’ sign (for NT/2k/XP) or the ‘|’ sign (for 98)
which often allow use of multiple commands on one line. See http://computerhope.com/issues/ch000177.htm
“Can you type more than one command at one command prompt?”. (Some of
what fails: ‘|’ after ‘if’ or ‘call’ statement; ‘&’ after ‘if’,
‘&’ after ‘set’ as in:set x=y&if %x%==y echo y; the set doesn’t
happen until AFTER a line break! Weird language…) Note: to echo the
‘&’ you must ‘echo ^&’
-The code-author’s EE id usually follows each code block.
-Some code just ‘echo’s the rename commands to be run. Must remove the ‘echo’ from ‘echo ren’ to actually do the deed.
~~ Add a suffix (*_n): ~~
http://www.experts-exchange.com/Operating_Systems/WinXP/Q_21678938.html
FOR %%f IN (*.*) DO ren %%f %%f_n
::mgh_mgharish
~~ Remove a suffix (Remove b in a_b.c) ~~
http://www.experts-exchange.com/Programming/Q_21506296.html
@echo off&for %%f in (*_*.*) do call :ProcessFile %%f
goto :eof
:ProcessFile
for /F “delims=_. tokens=1,3” %%c in (“%1”) do echo ren “%1” “%%c.%%d”
::Adam314
~~ Add a prefix (S1*): ~~
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20591441.html
for %%i in (*.*) do move %%i s1%%i
::bryancw
for /f “delims=” %i in (‘dir/b’) do ren “%i” “s1%i”
::ManuelGuerra
::pbarrette
The DOS command shell, to include WinNT/2K/XP
has always acted strangely when using wildcards in the middle of
filenames. The truth is, that wildcards almost never work correctly when
the wildcard is in the middle of the filename.
For example:
“REN *.TXT *-S1.TXT” will result in the file TEST1.TXT being renamed to TEST1.TXT-S1.TXT
“REN *.TXT S1-*.TXT” will result in the file TEST1.TXT being renamed to S1-T1.TXT
~~ Remove a prefix — a fixed # of bytes. Replace with new prefix. (SFyymmddhhmm.csv->SISCR12mmddhhmm.csv ) ~~
*** “:~4%” crop feature: where is it documented? Please let me know… – callrs***
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20784641.html
@echo off
for %%i in (SF03*.CSV) do (set fname=%%i) & call :rename
goto :eof
:rename
::Cuts off 1st 4 characters of fname, then appends prefix
ren %fname% SISCR12%fname:~4%
goto :eof
::-SethHoyt
~~ Add a prefix to numbers-only file-name: ~~
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_21474433.html
for /f %%a in (‘dir /b *.txt ^| findstr /I /X /R /C:^[0-9]*.txt’) do ren %%a prefix%%a
::or for 8-digit files only:
for /f %%a in (‘dir /b *.txt ^| findstr /I /X /R /C:^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].txt’) do ren %%a pyxbl%%a
::mpfister
~~ Rename to random number: ~~
http://www.experts-exchange.com/Operating_Systems/WinNT/Q_20781578.html
@echo off&setlocal
set FileMask=*.bmp
for /f “tokens=*” %%a in (‘dir /b /a:-d “%FileMask%”‘) do call :process “%%a”
goto :eof
:process
:loop
set rnd=%Random%
if exist %rnd%%~x1 goto loop
ECHO ren %1 %rnd%%~x1
goto :eof
::oBdA
~~ ??? wildcards ~~
http://www.experts-exchange.com/Miscellaneous/Q_21623266.html
ren ???xxx??? ???zzz???
::paraghs
~~ Recurse through all sub-directories (excluding current), changing extension: ~~
http://www.experts-exchange.com/Operating_Systems/WinXP/Q_21328624.html
@echo off
for /f “tokens=1 delims=” %%a in (‘dir /s /b /ad’) do if exist “%%a\*.asp” echo ren “%%a\*.asp” *.html >> rename.cmd
::leew
~~ Rename all jpg files in a folder tree (to cover.jpg): ~~
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20696712.html
@for /R c:\ %%f in (*.jpg) do echo rename “%%~ff” cover.jpg
::SteveGTR
~~ Recurse thru sub-directories, renaming files ~~
http://www.experts-exchange.com/Operating_Systems/WinXP/Q_20849138.html
FOR /r %1 IN (.) do MYRENAMEBAT.BAT %1
::RaviPal . Where the bat file is:
@echo off&echo This will rename all files containing ‘_fixed’.
echo CHANGE THE FOLDER&cd %1&Pause
rename *_fixed.zip *.xxx
rename *.zip *.zip.old
Rename *.xxx *.zip
~~ Suffix a date: ~~
http://www.experts-exchange.com/Miscellaneous/Games/DOS_Games/Q_10314402.html
ren c:\temp\abc.txt abc%date:~4,2%-%date:~7,2%-%date:~10%.txt
::temadan
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_21625029.html
@echo off&if [%1]==[] goto :usage
set strFile=%1
set strExt=%strFile:~-4%
set strNew=%strFile:~0,-4%
ren strFile %strNew%%date:~6,4%%date:~0,2%%date:~3,2%.%strExt%
goto :eof
:usage
RenFile OriginalFilename
::sirbounty
~~ Copy, adding system date: ~~
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20611296.html
@ECHO OFF
FOR /F “TOKENS=2-4 DELIMS=/ ” %%F IN (‘DATE /T’) DO (SET TODAY=%%F%%G%%H)
COPY /Y /B C:\TEMP\*.VCH C:\Upload\Combined.vch
REN C:\Upload\Combined.vch Combined-%TODAY%.vch
::pbarrette
~~ Rename jpg files to their file-time-stamp: ~~
http://www.experts-exchange.com/Operating_Systems/WinXP/Q_20805899.html
@ECHO OFF
FOR
%%V IN (*.jpg) DO FOR /F “tokens=1-5 delims=/: ” %%J IN (“%%~tV”) DO
IF EXIST %%L%%J%%K_%%M%%N%%~xV (ECHO Cannot rename %%V) ELSE (ECHO
RENAME “%%V” %%L%%J%%K_%%M%%N%%~xV & RENAME “%%V”
%%L%%J%%K_%%M%%N%%
~xV)
::From PC-Mag
::arjanh
~~ Copy, appending current date: ~~
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_21554862.html
@echo off&setlocal
::Change these as necessary
set Source=d:\temp\&set Dest=d:\temp2\
if “%Source:~-1%” NEQ “\” set Source=%Source%\
if “%Dest:~-1%” NEQ “\” set Dest=%Dest%\
if not exist %Source% goto :Error
if not exist %Dest% goto :Error
set Today=%date:~0,2%%date:~3,2%%date:~6,4%
for %%z in (%Source%*.*) do call :ProcessFile “%%z”
goto :eof
:ProcessFile
set FilePath=%~1&set FileName=%~n1&set FileExt=%~x1
::Remove the echo from the next line to do the actual copy
echo copy “%FilePath%” “%Dest%%FileName%_%Today%%FileExt%”
goto :eof
:Error
echo Either the source or destination directory does not exist
::Adam314
~~ Date Image Files based on date taken etc. ~~
http://www.experts-exchange.com/Operating_Systems/WinXP/Q_21374636.html
– http://www.hugsan.com/EXIFutils/html/features.html Rename image files based on the value of EXIF and IPTC fields
– http://www.kuren.org/exif/ How to read EXIF Tags (Similar to above)
– http://www.unidreamtech.com/index.php Powerbatch
– http://www.stuffware.co.uk/photostudio/ Photo Studio
– http://djernaes.dk/download/jpegdate14.zip – http://big.park.se/files/extra/exchange/jpgdate.zip
~~ Rename all files to 3-digit Number (001, 002, …): ~~
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_21062570.html
:: Change c:\temp\1\ with the folder your files are in. Don’t put .bat files in that folder.
@echo off&setlocal&set count=0
for /f “usebackq delims=” %%x in (`dir /a:-d /b “C:\TEMP\*.*”`) DO CALL :NUMBER %%x
goto :EOF
:NUMBER
set NAME=%~n1%
set EXT=00%count%
set EXT=%EXT:~-3%
echo ren “%1” “%NAME%.%EXT%”
set /a count+=1
goto :EOF
::MaartenG (-)
–>Below is MS-DOS 6 version, with c:\temp\1\ being path to files to rename.
——————— rename00.bat
ECHO OFF|set n1=0|set n2=0|set n3=0
for %%a in (c:\temp\1\*.*) do call renameit.bat %%a
set n1=|set n2=|set n3=|set nx=
——————— renameit.bat
rename %1 %n3%%n2%%n1%
set nx=%n1%| call incnx.bat
set n1=%nx%
if not %n1%==0 goto end
set nx=%n2%| call incnx.bat
set n2=%nx%
if not %n2%==0 goto end
set nx=%n3%| call incnx.bat
set n3=%nx%
:end
—————————- incnx.bat
if %nx%==0 goto number0
if %nx%==9 SET nx=0
if %nx%==8 SET nx=9
if %nx%==7 SET nx=8
if %nx%==6 SET nx=7
if %nx%==5 SET nx=6
if %nx%==4 SET nx=5
if %nx%==3 SET nx=4
if %nx%==2 SET nx=3
if %nx%==1 SET nx=2
goto end
:number0
SET nx=1
:end
::For-Soft
~~ Rename all files to prefix + a number (images_1.jpg, images_2.jpg …) ~~
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_21347867.html
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_21536842.html
@echo off&set /a cnt=1
for %%a in (*.jpg) do call :PROCESS “%%a”
goto :EOF
:PROCESS
echo rename %1 images_%cnt%.jpg
set /a cnt+=1
::SteveGTR
~~ Replace First Dot ~~
http://www.experts-exchange.com/Operating_Systems/Win2000/Q_20596712.html
@echo off&setlocal&echo.&set Test=FALSE
if %1.==. goto Syntax
if %1==/? goto Syntax
if %1==-? goto Syntax
if %2.==. goto :begin
if /i not %2==/test goto Syntax
set Test=TRUE
:begin
for /f %%a in (‘dir /b /a:-d %1’) do (
set FilePath=%%~dpa&set FileName=%%~na&set FileExt=%%~xa&call :process )
goto :eof
:process
if %FileName%==%FileName:.=% goto :eof
for /f “tokens=1* delims=.” %%a in (“%FileName%”) do set NewFileName=%%a-%%b
echo %FilePath%%FileName%%FileExt% –^> %NewFileName%%FileExt%
if /i %Test%==TRUE goto :eof
ren “%FilePath%%FileName%%FileExt%” “%NewFileName%%FileExt%”
goto :eof
:Syntax
echo %~nx0&echo.
echo Replaces first “.”, if any, of the file name with a “-“, but not the extension&echo.
echo Syntax: &echo repdot ^<File^> [/test]&echo.
echo ^<File^>: The specified directory/file is processed
echo /test: No renaming is done, files that would be renamed are only displayed.
echo.
::oBdA
~~ Move tokens around ~~
http://www.experts-exchange.com/Operating_Systems/WinNT/Q_20686191.html
@echo off&setlocal&set Folder=%1&set Pattern=samptest.txt.*
dir /b %Folder%%Pattern% 1>NUL 2>NUL
if errorlevel 1 goto Syntax
for /f %%a in (‘dir /b %Folder%%Pattern%’) do (
set File=%%a& call :process)
goto :eof
:process
echo Processing %File% …
for /f “tokens=1-3 delims=.” %%a in (“%File%”) do (
set Name=%%a
set Number=%%c)
set NewFile=%Name%%Number%.edi
:: *** Remove the “echo” in the next line to “arm” the script
echo ren %Folder%%File% %NewFile%
goto :eof
:Syntax
echo.&
echo ediren.cmd&echo.
echo Renames files matching samptest.txt.^<Number^>
echo to samptest^<Number^>.edi&echo.&echo Syntax:
echo ediren [^<Target Directory^>]&echo.
echo If no target directory is specified, the current directory is used.
echo The directory must be specified including the trailing “\”!
echo.
::oBdA
~~ Other ~~
http://www.experts-exchange.com/Programming/Programming_Languages/C/Q_20124580.html
MoveFile – Rename an existing file or a directory
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_20721695.html
renaming files but exclude newest
http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_20929292.html
Comparing,moving, and renaming files in a DOS atmosphere
http://www.experts-exchange.com/Operating_Systems/MSDOS/Q_21587969.html
A batch rena
me operation which cannot be done with dos, can someone do it in/with vbscript?
~~ General Renaming Utilities referenced in posts: * means freeware ~~
http://www.snapfiles.com/freeware/system/fwfilerename.html File Renaming Tools*
http://www.bulkrenameutility.co.uk/Main_Intro.php Bulk Rename Utility*
https://sourceforge.net/projects/renameit/ http://www.beroux.com/renameit/ Opensource Rename-it*
http://www.joejoesoft.com/vcms/108/ Rename Master*
http://www.kellysoftware.com/software/Rename4u.asp Rename4u (Kelly Software)*
http://www.azheavymetal.com/~lupasrename/news.php Lupas Rename 2000*
http://www.irfanview.com/ IrfanView* (File–>Batch Conversion/Rename…)
http://www.publicspace.net/windows/BetterFileRename/ Better File Rename (Not Free)
http://www.123renamer.com/buy.htm File and MP3 Tag Renamer (Trial)
~~ Below is my own code from answer to “Rename Files Instantaneously”:
http://www.experts-exchange.com/Operating_Systems/Win98/Q_21864152.html ~~
=================================================renlef+.bat
:: renlef+.bat
::
Prefix ADD utility for file names: Adds the specified prefix and delim
(& optionally isolates delim by spaces) to all files that have
specified extension
:: Doesn’t perform the rename, but generates & writes the commands to a bat file
:: If prefix+delim is already in the original name, then ignores the file unless doall=1
::
:: Arguments:
:: %1 – Prefix to add
:: %2 – Delimiter to add
:: %3 – Extension of file
:: %4 – Space – Set to 1 to add space to both sides of delim
:: %5 – Doall – See “If prefix+delim…” note above
::
:: v1.01 By Ravinder Singh (‘wiz’ on the quickmacros forum), May 26, 2006
::
::
:: if exists renlef+_.bat goto FILEEXISTS
@echo off
setlocal
set outfile=renlef+_
if exist “%outfile%.bat” del “%outfile%.bat”
if %1.==. (set /a exitcode=98&goto USAGE)
if %2.==. (set /a exitcode=98&goto USAGE)
set adn=%1&set delm=%2&set ext=%3&set space=%4&set doall=%5&&set count=0
if %doall%.==1. goto SIMPLE
for %%a in (*.%ext%) do (
if %space%.==1. (
echo %%a| find “%adn% %delm% “
if errorlevel 1 (set /a count+=1&echo ren “%%a” “%adn% %delm% %%a” >> “%outfile%.bat” ))
if NOT %space%.==1. (
echo %%a | find “%adn%%delm%”
if errorlevel 1 (set /a count+=1&echo ren “%%a” “%adn%%delm%%%a” >> “%outfile%.bat” ))
)
goto :DONE
:SIMPLE
:: separated routine here ’cause wasn’t able to integrate ’cause of weird behaviour in msdos on Win2K
:: e.g. if you SET XX=YY, then echo “%XX%” doesn’t give us XX’s value within a FOR loop, but only on exit from loop
for %%a in (*.%ext%) do (
set /a count+=1
if %space%.==1. echo ren “%%a” “%adn% %delm% %%a” >> “renlef+_.bat”
if NOT %space%.==1. echo ren “%%a” “%adn%%delm%%%a” >> “renlef+_.bat”)
:DONE
if %count%==0 (
echo No files found that match criteria.&echo.
set /a exitcode=97
goto usage
)
type renlef+_.bat
echo.
echo type: %outfile% To rename the above %count% files files! Or edit %outfile%.bat
goto :EOF
:USAGE
echo USAGE: %~nx0 WHAT-TO-APPEND-TO-LEFT DELIMETER EXTENSION SPACE? ALL?
exit /B %exitcode%
:FILEEXISTS
echo renall.bat exists. (Check ^& ) Delete file first.
exit /B 99
====================================================renlef-.bat
:: renlef-.bat
::
– Prefix REMOVAL utility for file names: Cuts the specified prefix
that precedes a space and/or the specified delimiters in a file name
:: As a precaution:
:: — All rename commands are generated & then displayed on screen
:: — All rename commands are written to a file which can be run (after any optional or required user’s edits)
::
:: Arguments:
:: %1 – Word to remove
:: %2 – Optional delimiters, in addition to the default space, that separate %1 from the part you want to keep
:: %3 – Extension of file
::
:: E.g. to remove initial “PART” from all files that start with “PART # “:
:: renlef- PART #
::
:: v1.01 By Ravinder Singh (‘wiz’ on the quickmacros forum), May 26, 2006
::
@echo off
setlocal
if %1.==. (set /a exitcode=98&goto usage)
set cut=%1&set delims=%2&set ext=%3&set outfile=renlef-_&set count=0
if exist “%outfile%.bat” del “%outfile%.bat”
::if not exist “%outfile%.bat” set writeToFile=1
set writeToFile=1
:: Let user see and verify all rename commands before we execute them
for /f “usebackq delims=” %%i in (`dir /b %cut%*.%ext%`) do @call :TEST “%%i”
if %count%==0 (
echo No files found that match criteria.&echo.
set /a exitcode=97
goto usage
)
echo.
echo type: %outfile% To rename the above %count% files! Or edit %outfile%.bat
goto :EOF
::1*
:TEST
set /a count+=1
set name=%1
FOR /f “usebackq tokens=1,2,3 delims=%delims% ” %%j IN (`echo %name%`) DO @set mycmd=ren %name% “%%k
echo %mycmd%
if %writeToFile%==1 echo %mycmd% >> %outfile%.bat
goto :EOF
:usage
echo usage: %~nx0 LEFT-TRIM-STRING DELIMS EXTENSION
exit /B %exitcode%
:: Other notes
::
:: original basic routine, with delimiters being “- “
::for /f “usebackq tokens=1,2,3 delims=- ” %%i in (`dir /b %1*`) do echo ren “%%i – %%j” “%%j”
::
:: 1* — Optional code, can use if you don’t want to create %output%.bat
:: Now prompt whether or not to do the batch rename
set/p input=Enter y to execute the above commands, anything else to quit:
if not %input%.==y. goto :EOF
for /f “usebackq delims=” %%i
in (`dir /b %cut%*.%ext%`) do @call :RENAMEALL “%%i”
goto :EOF
:RENAMEALL
set name=%1
FOR /f “usebackq tokens=1,2,3 delims=%delims% ” %%j IN (`echo %name%`) DO ren %name% “%%k
goto :EOF
