
标题: [文本处理] 【已解决】批处理查找文件夹路径并替换注册表文件内路径? [打印本页]
作者: 大地 时间: 5 天前 20:26 标题: 【已解决】批处理查找文件夹路径并替换注册表文件内路径?
查找文件夹路径并替换注册表文件内路径
能正常运行的代码如下:- @echo off
- setlocal enabledelayedexpansion
-
- set "target=PETOOLS"
- set "regfile=1.reg"
- set "found="
-
- rem 遍历所有分区(C到Z)
- for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
- if exist %%d:\ (
- echo 正在搜索 %%d 盘...
- rem 搜索子目录(排除根目录)
- for /f "delims=" %%a in ('dir /s /b /ad %%d:\%target% 2^>nul') do (
- set "path=%%a"
- rem 验证是否为子目录(路径包含两级以上目录)
- if not "%%~dpa"=="%%d:\" (
- rem 转义路径中的单斜杠为双斜杠
- set "newpath=!path:\=\\!"
- set "found=!newpath!"
- goto replace
- )
- )
- )
- )
-
- :replace
- if defined found (
- echo 替换目标路径为: %found%
- rem 创建临时文件并写入替换后的内容
- (
- for /f "usebackq delims=" %%i in ("%regfile%") do (
- set "line=%%i"
- set "line=!line:C:\\PETOOLS=%found%!"
- echo !line!
- )
- ) > "%regfile%.tmp.reg"
-
- rem 替换原文件
- move /y "%regfile%.tmp.reg" "%regfile%" > nul
- echo SUCCESS
- ) else (
- echo FAILED
- )
-
- endlocal
- pause
-
- pause
复制代码
----------------------------------------------------------------------------------------------------------------------------------------------------
批处理通过所有分区深层子目录中搜索,查到第一个文件夹PETOOLS后中止搜索,并把注册表1.reg中原有的路径C:\\PETOOLS替换为新的路径,注意:注册表路径是双斜杠\\,,单斜杠是无法导入注册表的,路径中没有空格也没特殊字符,也不需要搜索分区根目录,只要子目录,不要用wmic 也不要用poseerhsell 批处理代码如何写?
以下是AI给出的代码:
运行没成功,显示系统没找到指定的文件,如何修改,大神帮忙看一下。- setlocal enabledelayedexpansion
- set "target=PETOOLS"
- set "regfile=1.reg"
- set "found="
-
- rem 遍历所有分区(C到Z)
- for %%d in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
- if exist %%d:\ (
- echo 正在搜索 %%d 盘...
- rem 搜索子目录(排除根目录)
- for /f "delims=" %%a in ('dir /s /b /ad %%d:\%target% 2^>nul') do (
- set "path=%%a"
- rem 验证是否为子目录(路径包含两级以上目录)
- if not "%%~dpa"=="%%d:\" (
- rem 转义路径中的单斜杠为双斜杠
- set "newpath=!path:\=\\!"
- set "found=!newpath!"
- goto replace
- )
- )
- )
- )
-
- :replace
- if defined found (
- echo :%found%
- rem 替换注册表文件内容
- (for /f "usebackq delims=" %%i in ("%regfile%") do (
- set "line=%%i"
- set "line=!line:C:\\PETOOLS=%found%!"
- echo !line!
- )) >"%regfile%.tmp"
-
- rem 替换原文件
- move /y "%regfile%.tmp""%regfile%">nul
- echo SUCCESS
- ) else (
- echo FAILED
- )
-
- endlocal
- pause
复制代码
作者: Five66 时间: 5 天前 21:07
move /y "%regfile%.tmp""%regfile%">nul
参数那里连在一起了??? 分开来???
作者: 大地 时间: 5 天前 21:31
回复 2# Five66
分开后 测试也不行 应该不是这个问题
作者: Five66 时间: 5 天前 21:39
回复 3# 大地
把运行后的结果发出来看看
作者: 大地 时间: 5 天前 21:46
本帖最后由 大地 于 2025-3-29 21:51 编辑
回复 4# Five66 但
显示运行成功,但1.reg内容如下了:
F:\rr>(
set "line=C:\\PETOOLS"
set "line=!line:C:\\PETOOLS=F:\\rr\\kkkk\\PETOOLS!"
echo !line!
)
F:\\rr\\kkkk\\PETOOLS
多了上面5行
原来的C:\\PETOOLS 变为 F:\\rr\\kkkk\\PETOOLS 是对的 就是多了上面5行
作者: Five66 时间: 5 天前 22:03
回复 5# 大地
1.reg编码是啥???
作者: 大地 时间: 5 天前 22:05
回复 6# Five66
ANSI
作者: Five66 时间: 5 天前 22:34
回复 7# 大地
啊? ,开头不加上@echo off的??
作者: 窄口牛 时间: 4 天前 08:44
pecmd脚本直接搞不出来?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |