Comment renommer des fichiers en fonction de l'horodatage, avec un script batch?


0

Supposons que 10 fichiers sont générés chaque jour par le système sous D: \ Temp. Les noms sont générés aléatoirement.

Supposons que je dois renommer le plus ancien en 'aaa', le deuxième en 'bbb', puis 'ccc', 'ddd', etc.

supposons que ce sont les noms de cible que je vais utiliser:

Beijing
shanghai
hangzhou
suzhou
newyork
lanzhou
huzhou
guangzhou
tianjin
sichuang

Quelqu'un peut-il aider avec un script batch pour accomplir cela?

En fait, j’ai posé cette question hier et j’ai reçu une réponse merveilleuse avec PowerShell, mais aujourd’hui, je remarque que la machine virtuelle de la société ne me permet pas d’installer PowerShell (il n’est pas autorisé à l’installer par vous-même). peuvent conserver leurs (accepter) votes.


Est-ce que ça doit être batch? Pouvez-vous utiliser des programmes de renommer une interface graphique portable?
Karan

oui ça doit être batch. Impossible d'utiliser n'importe quel outil graphique car c'est un serveur partagé par une équipe et cela prend une longue procédure pour installer quoi que ce soit là

Ella, veuillez enregistrer votre compte ici. Vous semblez continuer à perdre votre cookie et vous devriez modifier votre question initiale ou laisser des commentaires plutôt que de poster des réponses ci-dessous. Voir superuser.com/help/user-merge pour plus d'informations.
Slhck

Si vous avez besoin de la date de création, vous devez afficher votre format de date, le résultat de dir /a-d.
Endoro

salut slhck, je me suis inscrit. Devrait bien fonctionner maintenant. Merci d'avoir rappelé.
ella

Réponses:


0
@echo off
setlocal disableDelayedExpansion
set "file1=aaa"
set "file2=bbb"
set "file3=ccc"
set "file4=ddd"
set "file5=eee"
set "file6=fff"
set "file7=ggg"
set "file8=hhh"
set "file9=iii"
set "file10=jjj"

for /f "tokens=1,2* delims=: " %%A in (
  'wmic datafile where "drive='d:' and path='\\temp\\'" get creationDate^, name ^| findstr "^[0-9]" ^| sort ^| findstr /n "^"'
) do for /f "delims=" %%F in ("%%C") do (
  setlocal enableDelayedExpansion
  for %%N in ("!file%%A!") do (
    endlocal
    ren "%%F" %%N
  )
)

Si vous voulez changer le chemin, vous devez être sûr de doubler tout \comme \\et assurez - vous que le chemin commence et se termine par \\. La lettre de lecteur appropriée (avec deux points) doit figurer dans l'option de lecteur.

Les valeurs de lecteur et de chemin doivent être entre guillemets simples - WMIC utilise la syntaxe SQL.


Merci dbenham, mais lorsque je modifie le chemin dans votre script et que je l'exécute, j'obtiens le code d'erreur "Description = requête non valide". Voici le script après l'avoir modifié. Mai est ridicule, mais je suis presque totalement nouveau en script. remarqué que vous définissez « caractères = abcdefghij », mais si je dois renommer les 10 fichiers différemment Dites ici sont les noms de fichiers cibles, du plus ancien au plus récent les: Pékin shanghai hangzhou suzhou NewYork lanzhou Huzhou guangzhou tianjin Sichuang
ella

@ella - Vous devriez être plus précis avec vos questions. J'ai mis à jour la réponse pour faciliter le paramétrage de tous les noms de cibles. Vous devriez pouvoir spécifier n’importe quel lecteur et chemin valides. Assurez-vous simplement que la syntaxe est celle décrite ci-dessus. Si vous avez toujours des problèmes, vous devez alors indiquer le chemin spécifique qui ne fonctionne pas.
Dbenham

,Merci pour l'aide. J'essaierai encore quand je serai au bureau aujourd'hui.
ella

0

Cela devrait fonctionner pour vous. Il renomme 26 fichiers aaaà zzz, date de création la plus ancienne. Regardez la sortie et supprimez la echocommande, si elle est OK.

@echo off&setlocal
set "startfolder=D:\temp"
set "alphas=abcdefghijklmnopqrstuvwxyz"
cd /d "%startfolder%"

set /a counter=0
for /f "tokens=3*" %%a in ('dir /a-d /od /tc ^| findstr "^[0-9]"') do set "fname=%%b"&call:process
goto:eof

:process    
setlocal enabledelayedexpansion
set "nname=!alphas:~%counter%,1!!alphas:~%counter%,1!!alphas:~%counter%,1!"
if not defined nname goto:eof
echo rename "%fname%" "!nname!"
endlocal
set /a counter+=1
goto:eof

Si votre dircommande indique l'heure avec AM / PM, réglez tokens=4*.


merci et désolé je ne l'ai pas mis clairement. Quand je dis «aaa», «bbb», «ccc», je ne voulais pas dire cela littéralement. supposons que les noms des cibles soient: shanghai shanghai hangzhou suzhou newyork lanzhou huzhou guangzhou tianjin sichuang
ella

Oh je vois. Dans ce cas, vous devriez faire une nouvelle question.
Endoro
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.