Inverser une date Batch

Bonjour,

Je souhaiterai renommer des fichiers sous le format AAAAMMJJ puis nom du fichier puis extension.

j'arrive à récupérer grace à un programme sur un forum la date puis le nom et l'extension mais je n'arrive pas à inverser la date. pourriez vous m'indiquer la ligne de commande et ou la placer dans mon programme svp. J''ai essaye de créer une variable dinv = %d:~6,4% %d:~3,2%
%d:~0,2%
mais cela ne fonctionne pas.

Voci mon code :

@echo off

set extension=JPG
setlocal enableDelayedExpansion
rem
rem dir /T:C pour avoir la date de création et non de modification
rem
for /F "tokens=1,2,3,*" %%a in ('dir /T:C *.%extension%^|findstr ".%extension%$"') do (
rem
rem on transforme la date JJ/MM/AAAA en JJ-MM-AAAA
rem parce que / et : sont interdits dans un nom de fichier
rem
set d=%%a
set d=!d:/=-!
rem
rem on recupère le nom du fichier sans l'extension
rem
set nom=%%~nd
rem
rem on renomme avec des " si il y a des noms avec espaces
rem
ren "%%d" "!d!_!nom!.%extension%")

merci pour votre aide.

5 réponses

  1. Contributeur
    chez moi, c'est bien la date du fichier qui est dans le rename
    1. Je viens de voir qu'en fait des que je copie de mon iphone vers un dossier, la date de creation devient celle du jour.
      Il faut que je recupere la date de modification en fait qui ne change pas quand je copie.
      Quel parametre changer dans ma boucle for pour la recuperer ?
      Merci par avance
    2. Avec un T:W last written ca fonctionne
  2. Si tu copies mon programme et que tu mets un :

    dinv=%d:~6,4%%d:~3,2%%d:~0,2%

    et à la fin un
    ren "%%d" "!dinv!_!nom!.%extension%")

    cela ne fonctionne pas.
    je n'ai aucun resultat.
    1. Contributeur
      essayer avec (i majuscule)
      ...findstr /I ".%extension%$"'
    2. @dubcekBonjour,
      Toujours la date au format jour mois année...
    3. Contributeur
      enlever le echo devant ren si c'est ok
      @echo off
      set extension=JPG
      setlocal enableDelayedExpansion
      for /F "tokens=1,2,3,*" %%a in ('dir /T:C *.%extension%^|findstr /I ".%extension%$"') do (
      set d=%%a
      set d=!d:~6,4!!d:~3,2!!d:~0,2!
      set nom=%%~nd
      echo ren "%%d" "!d!_!nom!.%extension%")

    4. @dubcekMerci beaucoup ,
      Dernière petite chose,

      peux tu me mettre les tirets stp entre année mois et date :-).

      Dans le programme du haut, celà y était, alors j'y connais pas grand chose, j'ai tenté d'insérer la ligne
      set d=!d:/=-!
      mais aucun succès, la date reste sans tiret.

      Merci
    5. Contributeur
      remplacer
      set d=!d:~6,4!!d:~3,2!!d:~0,2!

      par
      set d=!d:~6,4!-!d:~3,2!-!d:~0,2!
  3. Ce n'est pas la date du jour que je recupere mais la date de creation donc une chaine de caractere
    1. Contributeur
      quel est le format de la chaine ?
      remplacer date par d
  4. Contributeur
    hello
    C:> date /t
    05/11/2017

    C:> echo %date:~6,4%%date:~3,2%%date:~0,2%
    20171105
    1. Ce n'est pas la date du joir que je recuperer mais la date de creation donc une chaine de caractere.
  5. Contributeur
    bonjour, "cela ne fonctionne pas" = ? messager d'erreur, résultat inattendu, ...?
    1. En faisant echo dinv jai un 6,4 qui apparait ... jessaie ensuite de faire d=dinv
      Aucun resultat sur le renommage du fichier