无忧启动论坛

标题: 批处理命令修改指定的内容 [打印本页]

作者: 香国妙手    时间: 前天 22:01
标题: 批处理命令修改指定的内容

已知001.bat和002.bat位于同一个目录

我想运行001.bat自动把002.bat里面的“%SYSDRV%”修改为“E”

恳请大侠写一个001.bat

不胜感激!谢谢了!!!



作者: wangyibin    时间: 前天 22:42
本帖最后由 wangyibin 于 2024-11-21 13:25 编辑

方法一 (更新)
以下是一个简单的 001.bat 脚本,它会自动将 002.bat 文件中的 %SYSDRV% 替换为 E:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "target_file=002.bat"
  4. set "temp_file=002.tmp"

  5. REM 创建备份文件
  6. copy "%target_file%" "002.bak" >nul

  7. REM 创建临时文件并逐行替换
  8. (for /f "delims=" %%i in ('type "%target_file%"') do (
  9.     set "line=%%i"
  10.     set "line=!line:%%SysDrv%%=E!"
  11.     echo !line!
  12. )) > "%temp_file%"

  13. REM 用替换后的内容覆盖原文件
  14. move /y "%temp_file%" "%target_file%" >nul

  15. echo 替换完成.
  16. pause
复制代码
请将这个脚本 使用ANSI编码 保存为 001.bat 并将其与 002.bat 放在同一个目录下,然后运行 001.bat。这个脚本会创建一个临时文件来保存修改后的内容,然后备份原来的 002.bat 为002.bak 文件并将临时文件重命名为 002.bat。这样就能实现自动替换 %SYSDRV% 为 E 的功能。


方法二(推荐)使用文本编辑器
打开002.bat文件:用你喜欢的文本编辑器打开这个批处理文件,例如Notepad++、VS Code或Windows自带的记事本。
查找和替换:
在编辑器中,按 Ctrl+H 或找到“替换”选项。
在“查找内容”框中输入 %SYSDRV%。
在“替换为”框中输入 E。
确保“区分大小写”和“正则表达式”选项未勾选(除非你需要这些选项)。
点击“全部替换”或“替换所有”来替换所有匹配项。
保存文件:完成替换后,保存文件。


方法三 使用命令行工具(适用于Windows)(完美适配)
可以使用powershell的命令行工具来进行替换
运行 powershell 通过 cd 命令进入 002.bat 文件的文件夹 再运行下面命令
  1. Copy-Item -Path "002.bat" -Destination "002.bak"; (Get-Content -Path "002.bat") | ForEach-Object { $_ -replace '%SYSDRV%', 'E' } | Set-Content -Path "002.bat"
复制代码
这个命令首先执行Copy-Item命令来备份文件,然后使用分号(;)来分隔两个命令,之后进行文件内容的读取和替换操作。
作者: yyz2191958    时间: 前天 22:47
wangyibin 发表于 2024-11-20 22:42
以下是一个简单的 001.bat 脚本,它会自动将 002.bat 文件中的 %SYSDRV% 替换为 E:

助人为乐
作者: 1G空间100元    时间: 昨天 00:50
学习了 应该不要删除原文件  只用对原文件重命名做个备份比较好
作者: 1G空间100元    时间: 昨天 01:41
本帖最后由 1G空间100元 于 2024-11-21 01:52 编辑
wangyibin 发表于 2024-11-20 22:42
以下是一个简单的 001.bat 脚本,它会自动将 002.bat 文件中的 %SYSDRV% 替换为 E:

源文件中有!符号时 会被清除掉 比如<!--这样的,会被清理掉!符号,怎么优化下脚本不清除!符号
作者: wang1126    时间: 昨天 04:10
谢谢2楼分享
作者: 香国妙手    时间: 昨天 11:09
本帖最后由 香国妙手 于 2024-11-21 11:12 编辑
wangyibin 发表于 2024-11-20 22:42
方法一 (废弃)
以下是一个简单的 001.bat 脚本,它会自动将 002.bat 文件中的 %SYSDRV% 替换为 E:
请 ...

非常感谢坛友的热心回复!由于是在PE环境调用批处理文件执行自动化操作,绝大部分PE又没有集成powershell组件,因此只能寻求BAT命令解决。
根据您的脚本进行修正,已经不会吃掉002.bat中的"!",但是存在以下缺陷:

如果"%SysDrv%"前面没有空格就可以替换,
比如applydir:E:\%SysDrv%就成功替换。

如果"%SysDrv%"前面有空格就不能替换,
比如“Format %SysDrv%: ”就没有替换。

请高手帮我优化一下,解决出现空格就不能替换的问题。谢谢!

@echo off
setlocal DisableDelayedExpansion

REM 定义要查找和替换的字符串
set "search=%%SysDrv%%"
set "replace=E"

REM 创建一个临时文件
set "tempFile=002_temp.bat"

REM 读取002.bat内容并替换字符串
for /f "usebackq delims=" %%a in ("002.bat") do (
    set "line=%%a"

    REM 仅在当前行包含要查找的字符串时才进行替换操作
    echo %%a|findstr /c:"%search%" >nul
    if not errorlevel 1 (
        setlocal EnableDelayedExpansion
        set "line=!line:%search%=%replace%!"
        echo.!line!>>"%tempFile%"
        endlocal
    ) else (
        echo %%a>>"%tempFile%"
    )
)

del /s /q 002.bat

REM 重命名临时文件为002.bat
ren "%tempFile%" "002.bat"

endlocal
作者: wangyibin    时间: 昨天 12:09
香国妙手 发表于 2024-11-21 11:09
非常感谢坛友的热心回复!由于是在PE环境调用批处理文件执行自动化操作,绝大部分PE又没有集成powershell ...

要想完美适配 提供 002.bat代码来测试
作者: 香国妙手    时间: 昨天 12:41
wangyibin 发表于 2024-11-21 12:09
要想完美适配 提供 002.bat代码来测试

002.bat(非完整代码,但不影响测试)

@echo off
wmic LogicalDisk where "DeviceID='%SysDrv%:'" assoc:value /resultclass:Win32_DiskPartition
Format %SysDrv%: /q /x /y >nul

只要这两处能成功替换,那就OK

作者: yyz2191958    时间: 昨天 12:55
香国妙手 发表于 2024-11-21 11:09
非常感谢坛友的热心回复!由于是在PE环境调用批处理文件执行自动化操作,绝大部分PE又没有集成powershell ...

好人
作者: szwp    时间: 昨天 13:36
001里写set SysDrv=E,然后直接调用002
002里改成 wmic LogicalDisk where DeviceID='%SysDrv%:' assoc:value /resultclass:Win32_DiskPartition
作者: wangyibin    时间: 昨天 15:36
szwp 发表于 2024-11-21 13:36
001里写set SysDrv=E,然后直接调用002
002里改成 wmic LogicalDisk where DeviceID='%SysDrv%:' assoc:va ...

能直接改002就把%SysDrv%查找替换成E 还要001干什么
作者: nttwqz    时间: 昨天 15:58
直接参数调用不行吗?何必这么费劲

call或start 002.bat E:
作者: szwp    时间: 昨天 15:58
wangyibin 发表于 2024-11-21 15:36
能直接改002就把%SysDrv%查找替换成E 还要001干什么

改001只需改一处,也可以是用户在001里选择了E,再给sysdrv变量
作者: 1G空间100元    时间: 昨天 16:55
szwp 发表于 2024-11-21 13:36
001里写set SysDrv=E,然后直接调用002
002里改成 wmic LogicalDisk where DeviceID='%SysDrv%:' assoc:va ...

wmic命令在有些PE中没有 另外WIN2025已经没有wmic命令了
作者: 小七七    时间: 昨天 17:01
长见识了。
作者: szwp    时间: 昨天 17:56
1G空间100元 发表于 2024-11-21 16:55
wmic命令在有些PE中没有 另外WIN2025已经没有wmic命令了

楼主没说pe和2025吧
作者: 1G空间100元    时间: 13 小时前
szwp 发表于 2024-11-21 17:56
楼主没说pe和2025吧

香国妙手 在7楼有说明 是在PE环境调用批处理文件执行自动化操作
就算不是在PE或Win2025中执行脚本 那也是需要考虑脚本的通用性
你说呢
作者: szwp    时间: 7 小时前
1G空间100元 发表于 2024-11-22 01:29
香国妙手 在7楼有说明 是在PE环境调用批处理文件执行自动化操作
就算不是在PE或Win2025中执行脚本 那也 ...

wmic是楼主贴的




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3