返回列表 发帖
本帖最后由 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

回复 16# piazini

14楼代码中就是要用 %%b
再问你的真实替换关键词包含中文吗? 源文件是 ansi 编码还是 utf-8 编码?

TOP

本帖最后由 Five66 于 2025-1-27 15:56 编辑

找个不会出现在行开头的字符作为eol值
开头是行号,其实不用eol也行
已编辑
@echo off
set "PHP_INI_FILE=php.ini-dist"
set "SEARCH_TEXT=; cgi.fix_pathinfo = 0"
set "REPLACE_TEXT=cgi.fix_pathinfo = 1"
(
for /f "delims=" %%i in ('findstr /n .* "%PHP_INI_FILE%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:*:=!"
if /i "!line!" == "!SEARCH_TEXT!" (
echo(!REPLACE_TEXT!||/ ^)
) else (
echo(!line!||/ ^)
)
endlocal
)
)>"php.ini"
pause&exit/bCOPY

TOP

回复 18# aloha20200628
没有任何中文,下面是我的代码 :
set "SEARCH_TEXT=; cgi.fix_pathinfo=0"
        set "REPLACE_TEXT=cgi.fix_pathinfo = 1"
        (for /f "delims=" %%i in ('findstr /n ".*" %PHP_INI_FILE%') do (
            if /i "%%i"=="%SEARCH_TEXT%" (echo,%REPLACE_TEXT%) else echo,%%i
        ))>"%OUTPUT_FILE%" COPY
要替换的%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

本帖最后由 aloha20200628 于 2025-1-27 15:00 编辑

回复 21# piazini

21楼代码第一行 set "SEARCH_TEXT=; cgi.fix_pathinfo=0"
而1楼中的原值是 ; cgi.fix_pathinfo = 0
这两者有差别! 你确认哪个为真?再将真值替换进14楼代码相应位置就是了...

TOP

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

回复 22# aloha20200628

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

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

我也没有权限上传图片

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

TOP

帮楼主发个个php.ini-dist文件
不知行否
https://gofile.io/d/v1V6Os

TOP

本帖最后由 aloha20200628 于 2025-1-27 16:44 编辑

回复 22# piazini

用以下两行订正了14楼代码
set "SEARCH_TEXT=; cgi.fix_pathinfo=0"
set "REPLACE_TEXT=cgi.fix_pathinfo=1"
再用20楼所附下载文件中的 php.ini-dist (ansi 编码或 utf-8 编码皆可,共1284行)测试已经顺利通过(输出文件 php.ini 在第520行已被正确修改,1284行输出,其中 ! 字符没有丢失...)

TOP

本帖最后由 77七 于 2025-1-27 16:37 编辑

楼主应该不单单只替换某一个,而是一些吧?从楼主提供的文件中选取了写代码需要注意的行,还需要明确等号前后的空格需要保留原文本的格式,还是替换成新的固定格式?
[PHP]
;;;;;;;;;;;
; Directive names are *case sensitive* - foo=bar is different from FOO=bar.
;
; |        bitwise OR
; &        bitwise AND
; !        boolean NOT
engine = On
; Allow the <? tag.  Otherwise, only <?php and <script> tags are recognized.
precision    =  12
;output_handler =
zlib.output_compression = Off
; *NOT* affected by whether Safe Mode is turned On or Off.
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; cgi.fix_pathinfo=0
;fbsql.default_user = "_SYSTEM"
soap.wsdl_cache_dir="/tmp"COPY
bat小白,请多指教!谢谢!

TOP

回复 24# aloha20200628


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

TOP

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

TOP

回复 23# Five66


    新年好,感谢感谢

TOP

啊,楼主1楼例子的内容=号两边有空格
但是php.ini-dist里的=号两边是没有空格的
将19代码SEARCH_TEXT和REPLACE_TEXT =号两边的空格去掉 , 然后试试

TOP

回复 29# Five66


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

TOP

返回列表