提问人:Arthur Bernardo 提问时间:7/28/2023 最后编辑:CompoArthur Bernardo 更新时间:7/28/2023 访问量:41
批处理脚本 - 同时替换文件中的多个参数 [已关闭]
batch script - replace multiple arguments in a file at the same time [closed]
问:
要修改的文件位于多个用户 (%user%) 的每个目录中,例如:D:\Folder2\Userlist\user\config.yml
它被称为 ,看起来像这样:config.yml
#module1: [ var1 ]
#module2: [ var2 ]
#module3: [ var3 ]
#module4: [ var4 ]
我的目标是从命令行开始,能够通过在我的脚本中提出 和 替换 来激活模块,如下所示:#
var
#module1: [ var1 ]
#module2: [ var2 ]
module3: [ something ]
#module4: [ var4 ]
或者通过更正#
#module1: [ var1 ]
#module2: [ var2 ]
#module3: [ something ]
#module4: [ var4 ]
我有两个文件基于一个目录,D:\Folder\Example
测试.BAT
GOTO CHOOSEACCOUNT & exit
:CHOOSEACCOUNT
set "accountpath=D:\Folder2\Userlist"
CLS
ECHO.
dir /b /s %accountpath%\*.yml
ECHO.
SET /P "user=Choose a config?"
GOTO UPDATELINKCONFIG
:UPDATELINKCONFIG
if exist "%accountpath%\%user%\config.yml" (
set "pathuser=%accountpath%\%user%\config.yml"
GOTO CHOOSETASK
) else (
START cmd.exe /k "Color 4 && echo User Config don't exist ... && timeout /t 3 && exit"
GOTO CHOOSEACCOUNT
)
:CHOOSETASK
CLS
ECHO.
ECHO path loaded: %pathuser%
ECHO account: %user%
ECHO.
TYPE %accountpath%\%user%\config-update.txt #TO PRINT ALL CHANGES
echo +--------+
echo ^| MENU ^|
echo +--------+
ECHO.
ECHO 1 - EXAMPLE1
ECHO 2 - EXAMPLE2
ECHO 3 - EXAMPLE3
ECHO 4 - EXAMPLE4
ECHO 5 - EXAMPLE5
ECHO 6 - EXAMPLE6
ECHO 7 - EXIT
ECHO.
ECHO.
SET /P "C4=CHOOSE AND PRESS ENTER: "
IF %C4%==1 GOTO EXAMPLE1
IF %C4%==2 GOTO EXAMPLE2
IF %C4%==3 GOTO EXAMPLE3
IF %C4%==4 GOTO EXAMPLE4
IF %C4%==5 GOTO EXAMPLE5
IF %C4%==6 GOTO EXAMPLE6
IF %C4%==7 GOTO EXIT
START cmd.exe /k "Color 4 && echo Wrong option ... && timeout /t 3 && exit"
GOTO CHOOSETASK
:EXAMPLE1
SET /P "id90=WHO IS THE USER TO PUT? (syntax: username1, username2)"
CLS
ECHO.
echo +---------+
echo ^| SUBMENU ^|
echo +---------+
ECHO.
ECHO 1 - MODULE1
ECHO 2 - MODULE2
ECHO 3 - MODULE3
ECHO 4 - MODULE4
ECHO 5 - GO BACK
ECHO.
ECHO.
SET /P "C5=CHOOSE AND PRESS ENTER: "
IF %C5%==1 set "search=var1" && set "replace=%id90%" && set "module=module1" && GOTO ACTIVATEDESA
IF %C5%==2 set "search=var2" && set "replace=%id90%" && set "module=module2" && GOTO ACTIVATEDESA
IF %C5%==3 set "search=var3" && set "replace=%id90%" && set "module=module3" && GOTO ACTIVATEDESA
IF %C5%==4 set "search=var4" && set "replace=%id90%" && set "module=module4" && GOTO ACTIVATEDESA
IF %C5%==5 GOTO CHOOSETASK
CLS
START cmd.exe /k "Color 4 && echo Wrong option ... && timeout /t 3 && exit"
GOTO CHOOSETASK
:ACTIVATEDESA
CLS
set "moduleactivation=%module%"
set "moduledesactivation=#%module%"
ECHO.
ECHO 1 - Activate
ECHO 2 - Desactivate
ECHO.
ECHO.
SET /P "C11=CHOOSE AND PRESS ENTER: "
IF %C11%==1 GOTO ACTIVATEMODULE
IF %C11%==2 GOTO DESACTIVATEMODULE
CLS
START cmd.exe /k "Color 4 && echo Wrong option ... && timeout /t 3 && exit"
GOTO CHOOSETASK
:ACTIVATEMODULE
set s1=%moduledesactivation%
set r1=%moduleactivation%
START cmd.exe /k "D:\Folder\Example\update.bat && timeout /t 3 && exit"
(
echo The option %module% has been activated ^!
)>>"%accountpath%\%user%\config-update.txt"
timeout /t 2
set s1=%search%
set r1=%replace%
START cmd.exe /k "D:\Folder\Example\update.bat && timeout /t 3 && exit"
(
echo The module %module% parameter has been updated of %search% to %replace% ^!
)>>"%accountpath%\%user%\config-update.txt"
GOTO CHOOSETASK
:DESACTIVATEMODULE
set s1=%moduleactivation%
set r1=%moduledesactivation%
START cmd.exe /k "D:\Folder\Example\update.bat && timeout /t 3 && exit"
(
echo The option %module% has been desactivated ^!
)>>"%accountpath%\%global%\config-update.txt"
GOTO CHOOSETASK
:EXIT
exit
我不得不缩短代码以保持一切清晰,但有几个功能。:EXAMPLE
更新.BAT
@echo off
setlocal enableextensions disabledelayedexpansion
call: D:\Folder\Example\test.bat
for /f "delims=" %%i in ('type "%pathuser%" ^& break ^> "%pathuser%" ') do (
set "line=%%i"
setlocal enabledelayedexpansion
>>"%pathuser%" echo(!line:%s1%=%r1%!
endlocal
)
exit /b
此脚本读取 中的文件,将字符串替换为 ,并保存文件而不创建其他输出。(这使我免于删除/移动/重命名)%pathuser%
%search%
%replace%
一切都很正常,但是我有几个问题,
- 当我想激活 2 次更改时,一切正常,但是当一切正常时,我的 cmd 页面中出现错误:
:ACTIVATEMODULE
the system cannot find the command file name -
是否可以将文件直接集成到 ,并使用 ?我不完全理解这个概念,等等......这将允许我只有一个文件
update.bat
test.bat
call: UPDATE arg1 arg2
%~1
%~2
例如,当更改为某些内容时,如果我想再次重新启动更改,则它不起作用,因为不再存在。是否可以存储变量并因此更改为 .还是放一个变量,例如,代替字符串才能动态更改值?
var1
var1
set "search=var1"
set "search=%var1%"
%var1%
var1
答: 暂无答案
评论