Arquivo em lote do Windows: renomear arquivos (possivelmente em várias pastas) com base no arquivo de entrada (de nomes de arquivos de destino)

1

Eu sou um novato em lote ...

Esta "ferramenta" é para automatizar o emagrecimento do Windows (XP), desabilitando certos arquivos de driver, DLL e EXE do sistema. Em vez de excluir completamente, desejo renomear no local, "removendo-os" do sistema operacional, mas sem perder de vista onde eles pertencem (qualquer necessidade de ser "restaurada"). A renomeação é realizada anexando um novo sufixo ao nome de arquivo existente (por exemplo: "wdmaud.drv.group_1") O sufixo de renomeação deve ser outra variável de entrada.

A lista de destino é de aprox. 1100 arquivos longos (divididos em vários grupos / fases), portanto, a renomeação manual está fora de questão. Cada grupo será processado em uma execução separada do arquivo de lote, variando o arquivo de entrada da lista de destino para cada execução.

Target-list é um arquivo de texto simples, um nome de arquivo por linha (nenhum outro dado nos arquivos). Número de entradas por grupo varia. A lista de alvos ficará assim:

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

Os nomes dos arquivos podem estar no caso UPPER, lower ou MiXeD. Os arquivos podem estar presentes em mais de uma pasta na hierarquia C: \ Windows - ou podem não estar presentes. Se um arquivo não for encontrado em nenhum lugar do sistema, seu nome deverá ser escrito em um arquivo de texto, uma entrada por linha.

As pastas específicas de interesse são:

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

... mas pode mudar conforme o desenvolvimento avança.

Com base em uma resposta em stackoverflow.com, comecei assim:

    @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 <<
    
por cMP 06.10.2011 / 20:33

0 respostas