2008-10-10 9 views
1

Je suis en train de renommer tous les fichiers présents dans un répertoire Windows à l'aide commande FOR comme suit à l'invite de commande:scripts Windows pour commande pour renommer tous les fichiers dans un répertoire

for %1 in (*.*) do ren %1 test%1 

Par ex Ce renomme un fichier enc1.ctl à testenc1.ctlenc2.ctl à testenc2.ctl

Cest pas ce que je veux. Ce que je veux est enc1.ctl renommé test1.ctlenc2.ctl renommé test2.ctl

Comment puis-je faire cela?


@Akelunuk: Merci, ce w type de travaux, mais j'ai des noms de fichiers comme

h263_enc_random_pixels_1.ctl, h263_enc_random_pixels_2.ctl que je veux renommer

test1. ctl et test2.ctl respectivement

Alors comment?

Répondre

1

Si vous connaissez le nombre de fichiers, (disons 10), vous pouvez utiliser

for /L %1 in (1,1,10) do ren enc%1.ctl test%1.ctl 
2

Je l'ai!

for %1 in (.) do ren %1 t%1 

puis:

ren tenc*.* test*.* 
1

Je ne sais pas s'il est possible dans le lot, mais là encore je ne maîtrise cette langue primitive ... :-P

Si CMD ISN « t obligatoire, mais vous ne pouvez pas utiliser un bon fichier Renamer, vous pouvez le faire avec WSH:

var path= "E:/tmp"; 

var fso = WScript.CreateObject("Scripting.FileSystemObject"); 
var folder = fso.GetFolder(path); 
var files = new Enumerator(folder.files); 
for (; !files.atEnd(); files.moveNext()) 
{ 
    var file = files.item(); 
    var fileName = file.Name; 
    var p = /^enc(\d+)\.ctl$/.exec(fileName); 
    if (p != null) 
    { 
    var newFileName = "test" + p[1] + ".ctl"; 
    // Optional feedback 
    WScript.echo(fileName + " -----> " + newFileName); 
    file.Move(newFileName); 
    } 
} 

bien sûr, le mettre dans un file.j s
J'ai effectivement testé avec file.Copy(file.ParentFolder + "/SO/" + newFileName); pour éviter de perdre des fichiers ...

HTH.

0

Ce renomme tous les fichiers dans le répertoire des types de fichiers de filtre avec PREFIX et la date d'aujourd'hui et l'heure

@echo ON 
cls 
for %%a in (*.pdf) do (set myfiledate=%%~ta echo !myfiledate!) 

echo Date format = %myfiledate% 
echo dd = %myfiledate:~0,2% 
echo mm = %myfiledate:~3,2% 
echo yyyy = %myfiledate:~6,4% 
echo. 
echo Time format = %myfiledate% 
echo hh = %myfiledate:~11,2% 
echo mm = %myfiledate:~14,2% 
echo AM = %myfiledate:~17,2% 
echo. 
echo Timestamp = %myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2% 
ECHO "TEST..." > "test-%myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-TIME-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%.txt" 
PAUSE 

Cette echos succčs la date et l'heure définies comme Postfix, mais ne marche pas analyser les informations dans le changement de nom. Je n'arrive pas à comprendre pourquoi, mais c'est très proche. Peut-être que quelqu'un ne peut pas tordre en fonction de votre objectif.

@echo ON 
setlocal 
cls 
for %%a in (*.pdf) do (set myfiledate=%%~ta echo !myfiledate!) 

:DATETIME 
echo Date format = %myfiledate% 
echo dd = %myfiledate:~0,2% 
echo mm = %myfiledate:~3,2% 
echo yyyy = %myfiledate:~6,4% 

echo Time format = %myfiledate% 
echo hh = %myfiledate:~11,2% 
echo mm = %myfiledate:~14,2% 
echo AM = %myfiledate:~17,2% 
= %myfiledate:~17,2% 
echo. 

echo Timestamp = %myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2% 
ECHO "TEST..." > "test-%myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-TIME-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%.txt" 

for /f "delims=" %%a in ('dir *.pdf /t:a /a:-d /b /s') do call :RENAME "%%a" 

:RENAME 
REM for /f "tokens=1-6 delims=/ " %%a in ('dir %%a /t:w^|find "/"') do (
ren %%a "3DC-test-OFF-ELE-%myfiledate:~0,2%_%myfiledate:~3,2%_%myfiledate:~6,4%-TIME-%myfiledate:~11,2%_%myfiledate:~14,2%_%myfiledate:~17,2%~x1") 
PAUSE 
GOTO :EOF 
Questions connexes