Windows-batch-fil: omdøbe filer (muligvis i flere mapper) baseret på inputfil (af målfilnavne)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er en Batch-newbie, så vær så venlig at acceptere min undskyldning og tak på forhånd!


Dette 'værktøj' er at automatisere slankningen ned af Windows (XP) ved at deaktivere visse systemdriver-, DLL- og EXE-filer. I stedet for direkte sletning ønsker jeg at omdøbe-in-place og dermed 'fjerne' dem fra operativsystemet, men ikke at miste synet af, hvor de hører hjemme (skal det være nødvendigt at 'genoprettes'). Omdøbning udføres ved at tilføje et nyt suffiks til det eksisterende filnavn (fx: 'wdmaud.drv.group\_1') Omdøbs-suffixet skal være en anden inputvariabel.


Mållisten er ca. 1100 filer lange (opdelt i forskellige grupper/faser), så manuel omdøbning er uden for spørgsmålet. Hver gruppe vil blive behandlet i et separat løb af batchfilen, idet der varieres målliste-inputfilen for hver udførelse.


Målliste er almindelig tekstfil, et filnavn pr. Linje (ingen andre data i filerne). Antallet af poster pr. Gruppe varierer. Målliste vil se sådan ud:


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


Filnavne kan være i UPPER, lavere eller MiXeD-sag. Filerne kan være til stede i mere end en mappe i C: \ Windows hierarkiet - eller er muligvis ikke til stede. Hvis en fil ikke findes overalt i systemet, skal navnet på det være skrevet til en tekstfil, en-post-per-linje.


De specifikke mapper af interesse er:


    C:WINDOWS
    C:WINDOWSsystem
    C:WINDOWSsystem32
    C:WINDOWSsystem32dllcache
    C:WINDOWSsystem32drivers


Omdøbet vil ske ved at forbinde mål-OS-drevet til en anden XP-computer, så låste systemfiler bør ikke være et problem.


Enhver hjælp, du kan tilbyde, vil blive meget værdsat.

Bedste reference


et dobbelt FOR loop kan hjælpe dig. Dette er et meget simpelt eksempel, bare for at komme i gang


for /f "tokens=*" \%\%f in (\%targetlist\%) do (
  for /f "tokens=*" \%\%d in (\%dirlist\%) do (
    if exist "\%\%d\%\%f" echo \%\%f found in \%\%d
  )
)


se HELP FOR.