Fichier de commandes Windows: renommer des fichiers (éventuellement dans plusieurs dossiers) en fonction du fichier d'entrée (des noms de fichiers cibles)


1

Je suis un débutant dans le lot ...

Cet "outil" permet d’automatiser l’amincissement de Windows (XP) en désactivant certains pilotes système, fichiers DLL et EXE. Au lieu de le supprimer, je souhaite le renommer sur place, en le "supprimant" de l'OS, sans perdre de vue à quoi il appartient (si cela devait être "restauré"). Renommer est accompli en ajoutant un nouveau suffixe au nom de fichier existant (par exemple: "wdmaud.drv.group_1"). Le suffixe de renommage devrait être une autre variable d'entrée.

La liste de cibles est d'env. 1100 fichiers longs (divisés en divers groupes / phases), il est donc hors de question de renommer manuellement. Chaque groupe sera traité dans une exécution distincte du fichier de commandes, en modifiant le fichier d'entrée de la liste de cibles pour chaque exécution.

La liste de cibles est un fichier texte, un nom de fichier par ligne (aucune autre donnée dans les fichiers). Le nombre d'entrées par groupe varie. La liste de cibles ressemblera à ceci:

    -- example start --
    netapi.dll
    netcfgx.dll 
    netdde.exe 
    netevent.dll 
    nic1394.sys
    -- example end --

Les noms de fichiers peuvent être en majuscules, minuscules ou MiXeD. Les fichiers peuvent être présents dans plusieurs dossiers de la hiérarchie C: \ Windows ou peuvent ne pas l'être du tout. Si aucun fichier n’est trouvé dans le système, son nom doit être écrit dans un fichier texte, une entrée par ligne.

Les dossiers d’intérêt spécifiques sont:

    C:\WINDOWS\
    C:\WINDOWS\system\
    C:\WINDOWS\system32\
    C:\WINDOWS\system32\dllcache
    C:\WINDOWS\system32\drivers

... mais peut changer à mesure que le développement avance.

Basé sur une réponse à stackoverflow.com, j'ai commencé ainsi:

    @echo off

    set suffix=GROUP_1
    set targetlist=GROUP_1.txt
    set dirlist=folders.txt

    for /f "tokens=*" %%f in (%targetlist%) do (
      for /f "tokens=*" %%d in (%dirlist%) do (
        if exist "%%d\%%f" ren "%%d\%%f.%%suffix"
           echo %%f found in %%d >> foundlist.txt
      )
    )

=============================================== ============================

    :: -----------------------------------------------------------------::
    :: Batch Process to Rename-In-Place System Files from an Input List ::
    :: -----------------------------------------------------------------::

    @echo off
    :: >> clear files from previous run <<
    if exist RENAMED_files.txt  DEL RENAMED_files.txt
    if exist NOTFound_files.txt DEL NOTFound_files.txt

    ::  >> file rename-suffix reflects step name <<
    set suffix=Steppe_01

    ::  >> target file list to rename <<
    set targetlist=Steppe_01_files.txt

    ::  >> list of folders to search  <<
    set dirlist=folders.txt

    ::  >> PROCESS <<

    for /f "tokens=*" %%f in (%targetlist%) do (
      echo. >> NOTFound_files.txt
      for /f "tokens=*" %%d in (%dirlist%) do (
        if NOT exist "%%d\%%f"          echo %%f  not in %%d >> NOTFound_files.txt
        if exist     "%%d\%%f"          REN "%%d\%%f" "%%f.%suffix%"
        if exist     "%%d\%%f.%suffix%" echo renamed  %%f  in %%d >> RENAMED_files.txt
      )
    )

    ::  >> end of process <<

La protection de fichiers Windows est sur le point de vous frapper la tête avec un gros marteau. Ne dites pas plus tard que vous n'étiez pas prévenu.
JdeBP

1
Quelle est la question?
Paul
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.