[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 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也行
已编辑
  1. @echo off
  2. set "PHP_INI_FILE=php.ini-dist"
  3. set "SEARCH_TEXT=; cgi.fix_pathinfo = 0"
  4. set "REPLACE_TEXT=cgi.fix_pathinfo = 1"
  5. (
  6. for /f "delims=" %%i in ('findstr /n .* "%PHP_INI_FILE%"') do (
  7. set "line=%%i"
  8. setlocal enabledelayedexpansion
  9. set "line=!line:*:=!"
  10. if /i "!line!" == "!SEARCH_TEXT!" (
  11. echo(!REPLACE_TEXT!||/ ^)
  12. ) else (
  13. echo(!line!||/ ^)
  14. )
  15. endlocal
  16. )
  17. )>"php.ini"
  18. pause&exit/b
复制代码

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

本帖最后由 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 编辑

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

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

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

TOP

回复 29# Five66


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

TOP

返回列表