Windows 批处理文件:根据输入文件(目标文件名)重命名文件(可能在多个文件夹中)

Windows 批处理文件:根据输入文件(目标文件名)重命名文件(可能在多个文件夹中)

我是批处理新手...

此“工具”用于通过禁用某些系统驱动程序、DLL 和 EXE 文件来自动精简 Windows (XP)。我希望就地重命名,而不是直接删除,从而将它们从操作系统中“移除”,但又不会忘记它们应该放在哪里(如果需要“恢复”)。重命名是通过在现有文件名后附加新后缀来实现的(例如:“wdmaud.drv.group_1”)。重命名后缀应该是另一个输入变量。

目标列表大约有 1100 个文件(分为不同的组/阶段),因此无法手动重命名。每个组将在批处理文件的单独运行中处理,每次执行的目标列表输入文件都会有所不同。

目标列表是纯文本文件,每行一个文件名(文件中没有其他数据)。每组的条目数各不相同。目标列表将如下所示:

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

文件名可以是大写、小写或混合大小写。文件可能存在于 C:\Windows 层次结构中的多个文件夹中 - 或者可能根本不存在。如果在系统中的任何地方都找不到文件,则应将其名称写入文本文件,每行一个条目。

感兴趣的具体文件夹是:

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

...但可能会随着开发的进行而改变。

根据 stackoverflow.com 上的回复,我开始这样做:

    @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 <<

相关内容