[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何读取php.ini配置文件插入指定内容?

本帖最后由 piazini 于 2025-1-31 21:54 编辑

各位佬们,请教个问题。
php 每次升级,都要配置里面的某些参数(不用老的覆盖是因为怕有新内容注意不到,对比又费事麻烦,版本多的时候一个个对比,不太友好)
这里随便找个参数作为例子:
  1. ; cgi.fix_pathinfo = 0
复制代码
我想在遍历 php.ini-dist 这个文件时,如果发现有。这个字符串
  1. ; cgi.fix_pathinfo = 0
复制代码
那么就把;(封号去掉)或者插入没有;封号开头的内容
  1. cgi.fix_pathinfo = 1
复制代码
想要的结果是,在 php.ini-dist 原有内容基础上,插入 cgi.fix_pathinfo = 1,并生成新文件 php.ini

在for循环时候,会自动把;封号开头的内容过滤掉,所以可能导致下面方法没有成功。
用替换方法,没成功
  1. set "PHP_INI_FILE=php.ini-dist"
  2. for /f "delims=" %%i in ('type "%PHP_INI_FILE%"') do (
  3.             set "line=%%i"
  4.             set "line=!line:%SEARCH_TEXT%=%REPLACE_TEXT%!"
  5.             echo !line!>>"php.ini"
  6. )
复制代码
用if判断方法,没成功
  1. set "PHP_INI_FILE=php.ini-dist"
  2. for /f "delims=" %%i in ('type "%PHP_INI_FILE%"') do (
  3.             set "line=%%i"
  4.             if "!line!" == "%SEARCH_TEXT%" (
  5.                 echo "%REPLACE_TEXT%" >> "%OUTPUT_FILE%"
  6.             )
  7.             echo !line!>>"php.ini"
  8. )
复制代码
所以,请问,这个我要怎么弄才能达到效果

----------------------------------------------------------------------------------------------------------
2025年1月31日 更新:
经过楼下各位佬的解答,脚本功能已经完成。
可以直接跳到53楼查看
或者 点击连接查看
http://www.bathome.net/redirect. ... 0471&pid=287334

回复 2# Five66
没有要忽略的行,就是如果没有我想替换的字符串,那么原始的ini内容就全部写到新的ini文件里

TOP

回复 3# 77七
不想修改原始文件,就想读取 原始文件内容,把要替换的字符串替换了,然后生成新文件

TOP

回复 4# aloha20200628
eol=╟ 和  (echo,%REPLACE_TEXT%) 没看懂。

eol 为啥要忽略的是╟ ?
echo 后不是空格显示内容么?

TOP

回复 5# WHY

谢谢,但是想用 bat 实现

TOP

回复 11# aloha20200628


    ;封号开头的内容保留成功了,但是 空行和要替换的字符串没成功

TOP

本帖最后由 piazini 于 2025-1-27 14:20 编辑

回复 14# aloha20200628
谢谢你,这么快就回答我问题。以为快过年了,都忙着了。

for 里是 %%a 而if 是 %%b 是写错了?
空行保留了,但是前面有了行号。
来源字符串也是从源文件里复制粘贴到bat脚本里的,但是还是不行。

我在这个贴子http://www.bathome.net/redirect. ... 6383&pid=173035
也看到保留空行方式了,和你一样

TOP

回复 15# aloha20200628


    喜欢用原生的东西,换环境不用额外装东西,不过也非常感谢提醒

TOP

回复 18# aloha20200628
没有任何中文,下面是我的代码 :
  1. set "SEARCH_TEXT=; cgi.fix_pathinfo=0"
  2.         set "REPLACE_TEXT=cgi.fix_pathinfo = 1"
  3.         (for /f "delims=" %%i in ('findstr /n ".*" %PHP_INI_FILE%') do (
  4.             if /i "%%i"=="%SEARCH_TEXT%" (echo,%REPLACE_TEXT%) else echo,%%i
  5.         ))>"%OUTPUT_FILE%"
复制代码
要替换的%SEARCH_TEXT%内容,是从php-5.2.9-Win32 文件夹的 php.ini-dist 里复制出来的,VScode 显示是 UTF-8的编码

附件不能上传,你可以到 这个链接下载文件:https://museum.php.net/php5/php-5.2.9-Win32.zip

TOP

本帖最后由 piazini 于 2025-1-27 15:36 编辑

回复 22# aloha20200628

新版本的 等号两边是有空格的,是我在后来用了老版本的测试,导致描述不一致,抱歉。

那就先用 ; cgi.fix_pathinfo=0 这个来示例说明把。
现在空行是可以保留了,但是:替换还是没成功,而且文件里只要是 !叹号的地方,都被替换成空了

我也没有权限上传图片

结果到98%,马上和我 想要的结果一样了。

TOP

回复 24# aloha20200628


    新年快乐
    测试了一下,部分行中间的谈行被保留了,但是行尾的叹号还是被去掉了,如:113、193、316、401、772、807行都被去掉了。
    关键是我的还没替换成功
  1. set "SEARCH_TEXT=; cgi.fix_pathinfo=0"
  2.         set "REPLACE_TEXT=cgi.fix_pathinfo=1"
  3.         (for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" %PHP_INI_FILE%') do (
  4.             if /i "%%b"=="%SEARCH_TEXT%" (echo,%REPLACE_TEXT%) else echo,%%b
  5.         ))>>"%OUTPUT_FILE%"
复制代码

TOP

回复 25# 77七
新年好
这个配置文件里,去掉配置前的;封号就是开启某个设置值。
我希望的是保留源格式的情况下,去掉前面的封号或在后面插入对应的值。
但是目前还是没达到我想要的效果
不排除后期有多个值要去掉封号,但是目前连一个值前去掉封号都没成功。

TOP

回复 23# Five66


    新年好,感谢感谢

TOP

回复 29# Five66


    新年好,去掉了也没成功,奇怪了

TOP

本帖最后由 piazini 于 2025-1-29 21:31 编辑

回复 33# 77七


    我确实开启了延迟变量,但是遇到个问题,在if exist 前用endlocal关闭了延迟变量,但是"%INPUT_FILE_52_dev%" 为什么会成空值?
    我用%%包裹的变量也会收到影响?
  1.    set "INPUT_FILE_52_dev=php.ini-dist"
  2.    setlocal enabledelayedexpansion
  3.     <略 去一些其他代码>
  4.    endlocal
  5.    @REM 获取配置文件
  6.     set PHP_INI_FILE=
  7.     if exist "%INPUT_FILE_52_dev%" (
  8.         set PHP_INI_FILE="%INPUT_FILE_52_dev%"
  9.     ) else if exist "%INPUT_FILE_dev%" (
  10.         set PHP_INI_FILE="%INPUT_FILE_dev%"
  11.     ) else (
  12.         echo. & echo.
  13.         echo [ Error ] 没有匹配的 dev 版 ini 配置文件:%PHP_INI_FILE% !!!
  14.         echo. & echo. & pause & exit /b
  15.     )
复制代码
输出结果:
  1. [ Error ] 没有匹配的 dev 版 ini 配置文件: !!!
复制代码

TOP

返回列表