我是批处理新手...
此“工具”用于通过禁用某些系统驱动程序、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 <<