Board logo

标题: [ 新手习题 2 ] 批处理字符替换 [打印本页]

作者: wxcute    时间: 2008-11-7 18:40     标题: [ 新手习题 2 ] 批处理字符替换

有一文本内容如下:
a.txt
  1. 你他娘的是谁?他娘的我不告诉你。
  2. 你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
复制代码


论坛可是不允许用不文明用语的,请大家先把“他娘的”换成“TND”输出一遍,最后去掉这个不雅的词再输出一遍。

让大家都文明起来。

就算你看过别人的帖子了,你也可以再写一个。当然复制就没意义了,一定要自己写。
看似简单的题目,如果你自己写了,可能会发现你的代码原来有错,这样你又可以多学一样本领——改错。
上一题:[ 新手练习 1 ] 简易变量截取
http://bbs.bathome.net/thread-2451-1-1.html
下一题:[ 新手练习 3 ] 简易密码登录
http://bbs.bathome.net/thread-2492-1-1.html

[ 本帖最后由 wxcute 于 2008-11-17 11:31 编辑 ]
作者: sylovanas    时间: 2008-11-7 21:03

@IF NOT DEFINED DEBUG @ECHO OFF

FOR /F "TOKENS=*" %%A IN (A.TXT) DO (
        SETLOCAL ENABLEDELAYEDEXPANSION
        SET "VAR=%%A"
        SET "VAR=!VAR:他娘的=TND!"
        ECHO !VAR!
        ENDLOCAL
        )
FOR /F "TOKENS=*" %%A IN (A.TXT) DO (
        SETLOCAL ENABLEDELAYEDEXPANSION
        SET "VAR=%%A"
        SET "VAR=!VAR:他娘的=!"
        ECHO !VAR!
        ENDLOCAL
        )
作者: wxcute    时间: 2008-11-8 10:09     标题: 回二楼

不错。

我想问下,你为什么每个P都加 “@IF NOT DEFINED DEBUG” 这句呢?
作者: sylovanas    时间: 2008-11-8 11:03

除错用,

我有在写很多行等级不高的批处理
有些时候要除错必须要检查到哪一行出问题
所以当有变数debug时就会显示执行的行
这样除错比较快

[ 本帖最后由 sylovanas 于 2008-11-8 11:05 编辑 ]
作者: Batcher    时间: 2008-11-8 11:52     标题: 回复 2楼 的帖子

SETLOCAL ENABLEDELAYEDEXPANSION
SET "VAR=%%A"

这两行应交换位置,具体原因请参考:处理特殊字符的几种方法
http://bbs.bathome.net/thread-1224-1-3.html
作者: Batcher    时间: 2008-11-8 11:56     标题: 回复 4楼 的帖子

能否结合一个具体例子讲解一下?
作者: sylovanas    时间: 2008-11-8 12:43

  1. @IF NOT DEFINED DEBUG @ECHO OFF
  2. SET "SYSTEM=%SYSTEMROOT%\SYSTEM32"
  3. IF EXIST .\TEMP\* DEL .\TEMP\* /Q >NUL 2>&1
  4. IF EXIST LOG.TXT DEL LOG.TXT /Q >NUL 2>&1
  5. SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES" | SED "/.*SERVICES\\/I!d;s/.*SERVICES\\//I;s/$/\x22/" > .\TEMP\TEMP00
  6. GREP -Fviwf .\DAT\SERVICE.DAT .\TEMP\TEMP00 > .\TEMP\SERVICE01
  7. SED "s/\x22$//" .\TEMP\SERVICE01 > .\TEMP\SERVICE02
  8. ECHO AppMgmt>>.\TEMP\SERVICE02
  9. GREP -q "." .\TEMP\SERVICE02 && FOR /F "TOKENS=*" %%A IN (.\TEMP\SERVICE02) DO CALL :SER_CHK "%%A"
  10. GOTO END
  11. :SER_CHK
  12. IF "%~1"=="" GOTO:EOF
  13. IF NOT DEFINED SYSTEMB SET "SYSTEMB=%SYSTEM:\=\\%"
  14. IF NOT DEFINED SYSTEMROOTB SET "SYSTEMROOTB=%SYSTEMROOT:\=\\%"
  15. IF NOT DEFINED PROGRAMB SET "PROGRAMB=%PROGRAMFILES:\=\\%"
  16. IF ABC
  17. SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\%~1" | MTEE /+ .\TEMP\DEBUG01 > .\TEMP\SER_CHK01
  18. GREP -Fiq "   imagepath        " .\TEMP\SER_CHK01 || GOTO:EOF
  19. SET "SER0=S9"
  20. SET "SER1=%~1"
  21. SET "SER2=ERR"
  22. FOR /F "TOKENS=*" %%A IN ('SED -r "/^   START\t.*\t/I!d;s///;s/ .*//" .\TEMP\SER_CHK01') DO SET "SER0=S%%A"
  23. FOR /F "TOKENS=*" %%A IN ('SED -r "/^   DISPLAYNAME\t.*\t/I!d;s///" .\TEMP\SER_CHK01') DO SET "SER1=%%A"
  24. SED "/^   imagepath\t.*\t/I!d;s//\t/" .\TEMP\SER_CHK01 > .\TEMP\SER_CHK02
  25. SED "s/\t\\/\t/;s/\t??\\/\t/;s/\tSYSTEMROOT/\t%SYSTEMROOTB%/I;s/\tSYSTEM32/\t%SYSTEMB%/I;s/\t%%SYSTEMROOT%%/\t%SYSTEMROOTB%/I;s/\t%%PROGRAMFILES%%/\t%PROGRAMB%/I" .\TEMP\SER_CHK02 > .\TEMP\SER_CHK03
  26. GREP -iq "%SYSTEMB%\\SVCHOST\.EXE" .\TEMP\SER_CHK03 && CALL :SVC_CHK "%~1"
  27. IF /I "%SER2%"=="ERR" FOR /F "TOKENS=*" %%A IN (.\TEMP\SER_CHK03) DO SET "SER2=%%A  [%%~TZA]"
  28. ECHO %SER0%  %~1;%SER1%;%SER2%>>LOG.TXT
  29. DEL .\TEMP\SER_CHK0? .\TEMP\SVC_CHK0? /F/Q >NUL 2>&1
  30. SET "SER0="
  31. SET "SER1="
  32. SET "SER2="
  33. GOTO:EOF
  34. :SVC_CHK
  35. IF "%~1"=="" GOTO:EOF
  36. SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES\%~1\PARAMETERS" /V "SERVICEDLL" > .\TEMP\SVC_CHK01 2>NUL && (
  37.         SED "/^   SERVICEDLL\t.*\t/I!d;s//\t/" .\TEMP\SVC_CHK01 > .\TEMP\SVC_CHK02
  38.         SED "s/\t\\/\t/;s/\t??\\/\t/;s/\tSYSTEMROOT/\t%SYSTEMROOTB%/I;s/\tSYSTEM32/\t%SYSTEMB%/I;s/\t%%SYSTEMROOT%%/\t%SYSTEMROOTB%/I;s/\t%%PROGRAMFILES%%/\t%PROGRAMB%/I" .\TEMP\SVC_CHK02 > .\TEMP\SVC_CHK03
  39.         FOR /F "TOKENS=*" %%A IN (.\TEMP\SVC_CHK03) DO SET "SER2=%%A  [%%~TZA]"
  40.         DEL .\TEMP\SVC_CHK0? /F/Q >NUL 2>&1
  41.         )
  42. GOTO:EOF
  43. :END
复制代码
上面的到了IF ABC就會強制中斷
如果行數到很多行的時候會很不好找
所以加上DEBUG變數時
顯示出如下
  1. C:\UPX\1>SET "SYSTEM=C:\WINDOWS\SYSTEM32"
  2. C:\UPX\1>IF EXIST .\TEMP\* DEL .\TEMP\* /Q  1>NUL 2>&1
  3. C:\UPX\1>IF EXIST LOG.TXT DEL LOG.TXT /Q  1>NUL 2>&1
  4. C:\UPX\1>SWREG QUERY "HKLM\SYSTEM\CURRENTCONTROLSET\SERVICES"   | SED "/.*SERVIC
  5. ES\\/I!d;s/.*SERVICES\\//I;s/$/\x22/"  1>.\TEMP\TEMP00
  6. C:\UPX\1>GREP -Fviwf .\DAT\SERVICE.DAT .\TEMP\TEMP00  1>.\TEMP\SERVICE01
  7. C:\UPX\1>SED "s/\x22$//" .\TEMP\SERVICE01  1>.\TEMP\SERVICE02
  8. C:\UPX\1>ECHO AppMgmt 1>>.\TEMP\SERVICE02
  9. C:\UPX\1>GREP -q "." .\TEMP\SERVICE02   && FOR /F "TOKENS=*" %A IN (.\TEMP\SERVI
  10. CE02) DO CALL :SER_CHK "%A"
  11. C:\UPX\1>CALL :SER_CHK "1394hub"
  12. C:\UPX\1>IF "1394hub" == "" GOTO:EOF
  13. C:\UPX\1>IF NOT DEFINED SYSTEMB SET "SYSTEMB=C:\\WINDOWS\\SYSTEM32"
  14. C:\UPX\1>IF NOT DEFINED SYSTEMROOTB SET "SYSTEMROOTB=C:\\WINDOWS"
  15. C:\UPX\1>IF NOT DEFINED PROGRAMB SET "PROGRAMB=C:\\Program Files"
  16. 命令語法不正確。
  17. C:\UPX\1>IF ABC
复制代码
這樣找錯誤的行就比較快

[ 本帖最后由 sylovanas 于 2008-11-8 12:46 编辑 ]
作者: akiraakito    时间: 2008-11-14 16:51

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%a in (a.txt) do (
  4.     set var=%%a
  5.     set change=!var:他娘的=TND!
  6.     echo !change!
  7. )
  8. pause>nul
复制代码

作者: stalker    时间: 2008-11-23 19:57

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in (a.txt) do (
  4.     set a=%%i
  5.     set a=!a:他娘的=NND!
  6.     echo !a!
  7. )
  8. for /f "tokens=*" %%i in (xxx.txt) do (
  9.     set a=%%i
  10.     set a=!a:他娘的=!
  11.     echo !a!
  12. )
  13. pause>nul
  14. exit
复制代码
其实是一样的拉(^_^)
作者: stalker    时间: 2008-11-25 21:54

忘了改了,开始我自己用来测试的文件是xxx.txt
作者: heng520    时间: 2008-12-11 05:38

  1. @echo off
  2. echo 你他娘的是谁?他娘的我不告诉你。>a.txt
  3. echo 你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。>>a.txt
  4. for /f %%i in (a.txt) do (
  5. set v=%%i
  6. call echo %%v:他娘的=TMD%%
  7. )
  8. pause>nul&cls
  9. for /f %%i in (a.txt) do (
  10. set v=%%i
  11. call echo %%v:他娘的=%%
  12. )
  13. pause>nul
复制代码

作者: skuny    时间: 2009-1-14 15:47

@ECHO OFF
goto end2
:end2
set str1=你他娘的是谁?他娘的我不告诉你。
set str2=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
set a=%str1:他娘的=tnd%
echo %a%
set a=%a:tnd=%
echo %a%
set b=%str2:他娘的=tnd%
echo %b%
set b=%b:tnd=%
echo %b%
pause>nul
作者: ccmvhd    时间: 2009-1-22 18:33

@echo off&setlocal enabledelayedexpansion
for /f %%i in (1.txt) do (
set ver=%%i
echo !ver:他娘的=TND!
)
pause>nul&exit
学习了,以后可以玩@if not defined debug了,谢谢。。。。

[ 本帖最后由 ccmvhd 于 2009-1-22 18:38 编辑 ]
作者: hxinhu12315    时间: 2009-1-28 09:09

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (a.txt) do (
        set str=%%i
        set "str=!str:他娘的=TND!"
        echo !str!
)
echo.
for /f "tokens=*" %%i in (a.txt) do (
        set str=%%i
        set "str=!str:他娘的=!"
        echo !str!
)
pause>nul
作者: aresk    时间: 2009-2-11 20:53

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (a.txt) do (
  4. set a=%%i
  5. set var=!a:他娘的=TND!
  6. echo !var!>>abc.txt
  7. )
  8. del a.txt /q
  9. move abc.txt a.txt
  10. ::上面是把他娘的改成TND。
  11. ::下面把TND彻底去掉
  12. for /f %%i in (a.txt) do (
  13. set a=%%i
  14. set var=!a:TND=!
  15. echo !var!>>abc.txt
  16. )
  17. del a.txt /q
  18. move abc.txt a.txt
  19. pause
  20. exit
复制代码

测试已经通过
作者: irresolute    时间: 2009-2-12 09:26

@echo off
setlocal enabledelayedexpansion
echo 你他娘的是谁?他娘的我不告诉你。>1.txt
echo 你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。>>1.txt
for /f "delims=" %%i in (1.txt) do (
set aa=%%i
set aa=!aa:他娘的=tnd!
echo !aa!
set bb=!aa:tnd=!
echo !bb!
)
pause>nul
作者: TonyW    时间: 2009-2-22 10:50

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f %%i in (test.txt) do (
  3. set n=%%i
  4. set n=!n:他娘的=TND!
  5. echo !n!
  6. )
  7. pause
复制代码


第二题只需要将"TND"该为""就可以去掉"他娘的"那三个字!

想了很久才想起来以前跟着做过类似的例子:
http://bbs.bathome.net/thread-2898-1-1.html
作者: myzwd    时间: 2009-2-22 21:04     标题: 回复 1楼 的帖子

@echo off
set tt=TND
for /f "tokens=1-4 delims=他娘的" %%1 in ('more +3 %~s0') do echo %%1%tt%%%2%tt%%%3%tt%%%4
goto:eof
你他娘的是谁?他娘的我不告诉你。
你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。

-------------------------------------
@echo off
for /f "tokens=1-4 delims=他娘的" %%1 in ('more +3 %~s0') do echo %%1 %%2 %%3 %%4
goto:eof
你他娘的是谁?他娘的我不告诉你。
你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。

[ 本帖最后由 myzwd 于 2009-2-22 21:06 编辑 ]
作者: strong12345    时间: 2009-2-25 00:16     标题: 小弟也來發一個

  1. @echo off
  2. for /f "delims=" %%a in ('type a.txt') do (
  3. call set var=%%a
  4. call echo %%var:他娘的=TMD%%
  5.                                           )
  6. pause>nul
复制代码

作者: zjw767676    时间: 2009-2-25 23:09

  1. @echo off&setlocal EnableDelayedExpansion
  2. for /f %%i in (a.txt) do (
  3.                         set a=%%i
  4.                         set a=!a:他娘的=TND!
  5.                             echo !a!
  6.                              )
  7. pause
复制代码
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /f %%i in (a.txt) do (
  3.                         set a=%%i
  4.                         set a=!a:他娘的=!
  5.                             echo !a!
  6.                              )
  7. pause
复制代码

作者: evident    时间: 2009-2-26 16:19

2楼的 我试验了,屏显可以完成显示。 但是a.txt文件中的文字没有更改。

请问怎么更改TXT文件中的文字。 用>>输出?
作者: evident    时间: 2009-2-27 09:01

为什么用>不可以,必须用>>,看命令说明应该可以的。其中还有什么秘密么?

望哪位帮助回答下,小弟新学!
作者: sjzong    时间: 2009-5-10 00:04     标题: 回复 22楼 的帖子

你可以测试以下两个例子:
  1. @echo off
  2. echo 1 >1.txt
  3. echo 2 >1.txt
  4. start 1.txt
  5. pause>nul&exit
复制代码
例2:
  1. @echo off
  2. echo 1 >>2.txt
  3. echo 2 >>2.txt
  4. start 2.txt
  5. pause>nul&exit
复制代码
观察1.txt 和 2.txt 的内容。
>:表示后面输入的内容会覆盖前面输入的内容。
>>:表示后面输入的内容不会覆盖前面输入的内容,会接在后面!

[ 本帖最后由 sjzong 于 2009-5-10 00:06 编辑 ]
作者: 风行者    时间: 2009-7-13 03:20

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3. set /a n+=1
  4. set "s!n!=%%i"
  5. set "d=%%i"
  6. echo !d:他娘的=TND!
  7. )
  8. pause
  9. for /l %%i in (1 1 %n%) do call echo %%s%%i:他娘的=%%
  10. pause
复制代码

作者: dazheng    时间: 2009-7-29 18:01     标题: 感谢楼上所有

学习了,就不贴了,现在知道SET %PATH:str1=str2%的用法了
作者: hs4814    时间: 2009-8-10 12:49

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.txt) do (set b=%%i&echo !b:他娘的=TND! )
  4. echo,
  5. for /f "delims=" %%i in (a.txt) do (set b=%%i&echo !b:他娘的=! )
  6. PAUSE>nul
复制代码

[ 本帖最后由 wxcute 于 2009-8-16 13:25 编辑 ]
作者: wayaoqiang    时间: 2009-8-12 16:43

  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do set var2=%%a&call echo %%var2:他娘的=TND%%
  3. for /f "delims=" %%a in (a.txt) do set var2=%%a&call echo %%var2:他娘的=%%
  4. pause>nul
复制代码

[ 本帖最后由 wayaoqiang 于 2009-8-17 21:07 编辑 ]
作者: 蜗牛    时间: 2009-8-14 00:28

自己写的,应该没错吧  
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (f:\a.txt) do (
  set c=%%i
  set str=!c:他娘的=TND!
           echo !str!)
pause
我想问问 set c=%%i          set str=!c:他娘的=TND!      这两句可以写成一句吗?不是用&之类的,意思是能不能把中间变量c省去,直接替代
谢谢
作者: wxcute    时间: 2009-8-16 13:30     标题: 回复 28楼 的帖子

请用 CODE 将代码闭合
http://bbs.bathome.net/thread-404-1-1.html
如何用 code 把代码扩起来?


应该是不能,因为变量替换,这个 “变量” 都没有的话怎么替换呢!
作者: simontczx    时间: 2009-8-16 17:44

for /f "tokens=*" %%i in (a.txt) do (
    set a=%%i
    set a=!a:他娘的=!
    echo !a!
set a=!a:他娘的=!这一句是什么意思啊??为什么要用!!
作者: canyuexiaolang    时间: 2009-8-24 08:46

  1. @echo off & setlocal EnableDelayedExpansion
  2. echo 你他娘的是谁?他娘的我不告诉你。你他娘的到底是谁?我他娘的还就不告诉那个他娘的你
  3. pause>nul
  4. echo.
  5. set n="你他娘的是谁?他娘的我不告诉你。你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。"
  6. for /f  "tokens=* delims=" %%i in (%n%) do (
  7.     set a=%%i
  8.     set a=!a:他娘的=TND!
  9.     echo !a!
  10. )
  11. pause>nul
  12. echo.
  13. echo.
  14. set b="%a%"
  15. for /f "tokens=* delims=" %%a in (%b%)do (
  16.     set b=%%a
  17.     set b=!b:TND=!
  18.     echo !b!
  19. )
  20. pause>nul
复制代码
说句话,变量延迟真TMD难理解(— —)
作者: DXSX    时间: 2009-8-25 11:20

第二个目的 用一条语句就可以解决,不用P处理

for /f "delims=他娘的 tokens=1,2,3,4,5" %c in (123.txt) do @echo %c%d%e%f%g
作者: zgq0301    时间: 2009-11-11 12:57

  1. @echo off
  2. set str=你他娘的是谁?他娘的我不告诉你。你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
  3. echo  %str:他娘的=TND%
  4. echo %str:他娘的=%
  5. pause
复制代码


学习了for,重新写
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in (a.txt) do (
  4.     set a=%%i
  5.     set a=!a:他娘的=TND!
  6.     echo !a!
  7. )
  8. for /f "tokens=*" %%i in (a.txt) do (
  9.     set a=%%i
  10.     set a=!a:他娘的=!
  11.     echo !a!
  12. )
  13. pause
复制代码

[ 本帖最后由 zgq0301 于 2009-11-13 19:48 编辑 ]
作者: qingyuedufeng    时间: 2009-11-11 23:49

换成“TND”输出:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in (a.txt) do (
  4.   set int=%%a
  5.   set yu=!int:他娘的=TND!
  6.   echo !yu!
  7. )
  8. pause>nul
复制代码
去掉“他娘的”输出:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in (a.txt) do (
  4.   set int=%%a
  5.   set yu=!int:他娘的=!
  6.   echo !yu!
  7. )
  8. pause>nul
复制代码

作者: bamboo    时间: 2009-11-20 16:05

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 流氓对话:
  4. type a.txt
  5. echo.
  6. echo 网络对话:
  7. pause>nul
  8. for /f %%a in (a.txt) do (
  9. set str=%%a
  10. set newstr=!str:他娘的=TND!
  11. echo !newstr!
  12. )
  13. echo.
  14. echo 文明对话:
  15. pause>nul
  16. for /f %%a in (a.txt) do (
  17. set str=%%a
  18. set newstr=!str:他娘的=!
  19. echo !newstr!
  20. )
  21. echo    按任意键退出!
  22. pause>nul
复制代码

作者: ljjllj    时间: 2009-11-26 13:43

如下
@ECHO OFF
SET VARa=你他娘的是谁?他娘的我不告诉你。你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
SET VARb=%VARa:他娘的=TND%
ECHO 替换后的值:%VARb%
pause
作者: pumahxh    时间: 2009-11-26 14:12     标题: 不用变量延时也能做到

  1. @echo off
  2. set /p str=<1.txt
  3. set str1=%str:他娘的=TND%
  4. set str2=%str1:TND=%
  5. echo %str% &echo.
  6. echo %str1% &echo.
  7. echo %str2% &echo.
  8. pause
复制代码

作者: summerflower    时间: 2009-11-27 23:40

  1. @echo off
  2. setlocal
  3. setlocal enabledelayedexpansion
  4. for "tokens=*" /f %%f in (a.txt) do (
  5.   set strtmp=%%f
  6.   set strtmp=!strtmp:他娘的=TND!
  7.   echo !strtmp!
  8. )
  9. endlocal
复制代码

作者: lvyaojian    时间: 2009-12-14 11:05

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (test.txt) do (
  4. set str=%%i
  5. echo !str:他娘的=TND!
  6. )
  7. pause
  8. for /f %%i in (test.txt) do (
  9. set str=%%i
  10. echo !str:他娘的=!
  11. )
  12. pause
复制代码

作者: wsjxwj    时间: 2009-12-14 12:39

呵呵,其实我是看了8楼的方法,再改了一点就得出了楼主的第二个题目的答案了

::A1
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (a.txt) do (
    set var=%%a
    set change=!var:他娘的=TND!
    echo !change!
)
pause>nul

::A2
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (a.txt) do (
    set var=%%a
    set change=!var:他娘的=!
    echo !change!
)
pause>nul

作者: a590687    时间: 2010-1-19 21:07     标题: 写了了遍 还真发现错的地方 

写=的时候没关输入法 结果查错 查了半天
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set a=%%i
  4.     set b=!a:他娘的=TND!
  5.     echo !b!
  6. )
  7. for /f "delims=" %%j in (a.txt) do (
  8.     set c=%%j
  9.     set d=!c:他娘的=!
  10.     echo !d!
  11. )
  12. pause
复制代码

作者: tgwg001    时间: 2010-1-19 21:51

@echo off
setlocal enabledelayedexpansion
for /f %%b in (a.txt) do (
set dd=%%b
set bb=!dd:他娘的=tnd!
echo !bb!
)
pause>nul
作者: wgoxm521    时间: 2010-1-28 21:12

看看7楼的答案,暂时不潜水
作者: 634175535    时间: 2010-4-26 09:31

先看看高手如何做自己再研究下丶
作者: mangci    时间: 2010-5-1 02:46

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (a.txt) do (
    set var=%%a
    set change=!var:他娘的=TND!
    echo !change!>>b.txt
   
)
for /f "tokens=*" %%b in (b.txt) do (
    set change=%%b
set str=!change:TND=!
    echo !str!
)
pause>nul
作者: gxuan2008    时间: 2010-7-3 14:44

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str="
  4. for /f "delims=" %%a in (a.txt) do (
  5.     set "str=!str!%%a"
  6. )
  7. echo !str!
  8. echo.
  9. echo 下面把"他娘的"换成TND。
  10. echo ------------------------------------------------------------------
  11. set "nstr=!str:他娘的=TND!"
  12. echo !nstr!
  13. echo ------------------------------------------------------------------
  14. echo.
  15. echo 下面把"他娘的"去掉。
  16. echo ------------------------------------------------------------------
  17. set "nstr1=!str:他娘的=!"
  18. echo !nstr1!
  19. echo ------------------------------------------------------------------
  20. pause
复制代码
好像写得有点繁,呵呵。
问个问题:批处理中有对文本进行进行换行的常量吗?如VB中有vbcrlf。
作者: poxi    时间: 2010-7-18 20:29

答:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo =======替换版==========
  4. for /f %%a in (a.txt) do (
  5.    set a=%%a
  6.    set a=!a:他娘的=TND!
  7.    echo !a!
  8. )
  9. echo.
  10. echo =======去除版==========
  11. for /f %%a in (a.txt) do (
  12.    set a=%%a
  13.    set a=!a:他娘的=!
  14.    echo !a!
  15. )
  16. pause>nul
复制代码
效果:
[attach]2728[/attach]

======================
end;
作者: solid    时间: 2010-7-27 22:39

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%a in ( a.txt ) do (
set ti1=%%a
set "ti=!ti1:他娘的=TND!"
echo !ti! >>b.txt
)
del a.txt
ren b.txt a.txt
for /f "tokens=*" %%a in ( a.txt ) do (
set ti1=%%a
set "ti=!ti1:TND=!"
echo !ti! >>b.txt
)
del a.txt
ren b.txt a.txt
作者: fish    时间: 2010-7-29 20:20     标题: 不知道还能再精简吗?

  1. @echo off
  2. for /f %%i in (a.txt) do (
  3.     set o=%%i
  4.     setlocal enabledelayedexpansion
  5.     set "s1=!s1!!o:他娘的=TND!"      
  6.     set "s2=!s1:TND=!"   
  7. )
  8. echo !s1!
  9. echo !s2!
  10. pause>nul
复制代码
有点遗憾是没能实现换行显示!还请各位前辈赐教。。。
作者: fish    时间: 2010-7-29 22:05     标题: 多谢defanive前辈指教,实现了换行的功能。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=^
  4. for /f %%i in (a.txt) do (
  5.     set o=%%i
  6.     set "s1=!s1!!o:他娘的=TND!!n!"      
  7.     set "s2=!s1:TND=!"   
  8. )
  9. echo !s1!
  10. echo !s2!
  11. pause>nul
复制代码
不过原理不是很清楚只是依葫芦画瓢,所以希望知道原理的前辈给晚辈详细讲解一番,晚辈在此先谢过了。。。
作者: rogue_1983    时间: 2010-7-29 22:17     标题: 这样也可以

<1>@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (a.txt) do (
set "var=%%i"
echo !var:他娘的=TND!)
pause
<2>@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (a.txt) do (
set "var=%%i"
echo !var:他娘的=!)
pause
作者: zcydez    时间: 2010-7-30 14:15

  1. @echo off&setlocal EnableDelayedExpansion
  2. for %%i in (你他娘的是谁?他娘的我不告诉你。 你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。) do (
  3. set var1=%%i
  4. set var2=!var1:他娘的=TND!
  5. echo !var2!
  6. set var2=!var1:他娘的=!
  7. echo !var2!
  8. )
  9. pause
复制代码

作者: skuny    时间: 2010-12-22 23:51

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (a.txt) do (
  4. set a=%%i
  5. set a=!a:他娘的=tnd!
  6. echo !a!
  7. )
  8. for /f %%i in (a.txt) do (
  9. set a=%%i
  10. set a=!a:他娘的=!
  11. echo !a!
  12. )
  13. endlocal
  14. pause
复制代码

作者: mac007cn    时间: 2010-12-27 14:45

  1. @echo off
  2. setlocal EnableExtensions
  3. setlocal EnableDelayedExpansion
  4. for /f %%a in (bat02.txt) do (
  5.         set str=%%a
  6.         echo !str:他娘的=TND!
  7. )
复制代码

[ 本帖最后由 mac007cn 于 2010-12-27 14:46 编辑 ]
作者: vincentzhou    时间: 2010-12-31 22:41

  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1 1 2) do (
  3. for /f %%a in (a.txt) do (
  4.      set /a n+=1
  5.      set k=%%a
  6.      set b=!k:~,1!
  7.      set c=TND
  8.      if "!n!"=="1" (
  9.         set d=!k:~4,3!
  10.         set e=!k:~-6!
  11.         if "%%i"=="1" (
  12.            echo !b!!c!!d!!c!!e!
  13.         ) else (
  14.            echo !b!!d!!e!
  15.         )
  16.      ) else (
  17.         set d=!k:~4,6!
  18.         set e=!k:~-12,7!
  19.         set f=!k:~-2!
  20.         if "%%i"=="1" (
  21.            echo !b!!c!!d!!c!!e!!c!!f!
  22.         ) else (
  23.            echo !b!!d!!e!!f!
  24.         )
  25.      )
  26. )
  27. pause>nul
  28. )
  29. pause>nul
复制代码

作者: vincentzhou    时间: 2010-12-31 22:47

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in (a.txt) do (
  3.     set str=%%a
  4.     set str=!str:他娘的=TND!
  5.     echo !str!
  6. )
  7. pause>nul
  8. for /f %%a in (a.txt) do (
  9.     set str=%%a
  10.     set str=!str:他娘的=!
  11.     echo !str!
  12. )
  13. pause>nul
复制代码

作者: we6540    时间: 2011-1-29 16:48

@echo off
setlocal enabledelayedexpansion
for /f %%i in (1.txt) do (
set a=%%i
set b=!a:他娘的=TND!
echo !b!
)
pause
作者: smith203    时间: 2011-3-6 09:54

复杂啊。。有点不懂, 努力。。
作者: zxd11097    时间: 2011-7-17 00:40

第2题解答
  1. @echo off
  2. :字符替换练习题
  3. echo 解答替换"他娘的"为"TND"
  4. set "a=你他娘的是谁?他娘的我不告诉你。"
  5. set "b=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。"
  6. echo %a:他娘的=tnd%&echo. &echo %b:他娘的=tnd%&echo 按任意键获取第2结果&pause>nul
  7. echo.
  8. echo %a:他娘的=%&echo. &echo %b:他娘的=%&echo 按任意键结束本题&pause>nul
复制代码

作者: Hello123World    时间: 2011-7-17 12:51

1# wxcute
  1. @echo off&SetLocal EnableDelayedExpansion
  2. For /f "delims=" %%i in (1.txt) do (Set a=%%i
  3. Set a=!a:他娘的=tnd!
  4. Echo !a!)
  5. pause
复制代码
  1. @echo off&SetLocal EnableDelayedExpansion
  2. For /f "delims=" %%i in (1.txt) do (Set a=%%i
  3. Set a=!a:他娘的=!
  4. Echo !a!)
  5. pause
复制代码

作者: liujb114    时间: 2011-7-18 16:11

为什么我只能写出这样的码?天啊。
@echo off
set str1=你他娘的是谁?我他娘的不告诉你。
set a=%str1:~0,-15%
set b=%str1:~1,-12%
set c=%str1:~4,-8%
set d=%str1:~8,-5%
set e=%str1:~11%
set i=tnd
echo %a%%i%%c%%i%%e%
pause
作者: qq399254368    时间: 2012-9-10 09:36

批处理字符替换
我想问一下,假如替换的对象有空格或者用空格替换的话,好像不能这样写吧。
作者: collapsar    时间: 2012-10-22 16:40

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%i in (a.txt) do (
  4. set var=%%i
  5. set var=!var:他娘的=TND!
  6. echo !var!
  7. )
  8. for /f "tokens=*" %%i in (a.txt) do (
  9. set var=%%i
  10. set var=!var:他娘的=!
  11. echo !var!
  12. )
  13. pause
复制代码

作者: bat爱好者    时间: 2013-1-5 16:56

回复 11# heng520


    call在里面的作用是什么?
作者: Enterpaise    时间: 2013-1-16 15:22

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f %%i in (a.txt) do (
  3.     set var=%%i
  4.     echo !var:他娘的=TND!
  5. )
  6. echo.
  7. echo.
  8. for /f %%i in (a.txt) do (
  9.     set var=%%i
  10.     echo !var:他娘的=!
  11. )
  12. pause
复制代码

作者: annali74    时间: 2013-4-3 14:13

  1. @echo off
  2. set a=你他娘的是谁?他娘的我不告诉你。
  3. set b=%a:他娘的=TND%
  4. set c=%a:他娘的=%
  5. echo %b%
  6. echo %c%
  7. pause
复制代码

作者: skynjupt    时间: 2013-4-22 12:54

  1. @echo off
  2. chcp 936>nul
  3. cd.>a.txt
  4. set /p=你他娘的是谁?他娘的我不告诉你。<nul 1>>a.txt
  5. echo.>>a.txt
  6. set /p=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。<nul 1>>a.txt
  7. echo.==========原文内容==========:
  8. for /f %%i in (a.txt) do echo %%i
  9. echo.&echo.==========“他娘的”换成“TND”后内容==========:
  10. for /f %%i in (a.txt) do (
  11. set "str=%%i"
  12. call set "str=%%str:他娘的=TND%%"
  13. call echo %%str%%
  14. )
  15. echo.&echo.==========去掉这个不雅的词再输出一遍==========:
  16. for /f %%i in (a.txt) do (
  17. set "str=%%i"
  18. call set "str=%%str:他娘的=%%"
  19. call echo %%str%%
  20. )
  21. echo.&echo.让大家都文明起来哈
  22. del /a /f a.txt
  23. pause
复制代码

作者: 2846090741    时间: 2013-5-18 14:06

替换
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. echo 原文
  4. set a=你他娘的是谁?他娘的我不告诉你。 & echo !a!
  5. set b=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。 & echo !b!
  6. echo.
  7. echo 替换不文明语句
  8. set a=%a:他娘的=TND% & echo !a!
  9. set b=%b:他娘的=TND% & echo !b!
  10. endlocal
  11. pause > nul
复制代码
去除
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. echo 原文
  4. set a=你他娘的是谁?他娘的我不告诉你。 & echo !a!
  5. set b=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。 & echo !b!
  6. echo.
  7. echo 去掉不文明语句
  8. for /F "tokens=1-3* delims=他娘的" %%i in ('echo %a%') do @echo %%i%%j%%k
  9. for /F "tokens=1-4* delims=他娘的" %%i in ('echo %b%') do @echo %%i%%j%%k%%l
  10. endlocal
  11. pause >nul
复制代码

作者: keyboard    时间: 2013-7-18 22:09

交流交流
  1. @if not defined debug @echo off
  2. echo 你他娘的是谁?他娘的我不告诉你。>a.txt
  3. echo 你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。>>a.txt
  4. for /f "tokens=*" %%i in (a.txt) do (
  5.     setlocal enabledelayedexpansion
  6.     set "var=%%i"
  7.     set "var=!var:他娘的=TND!"
  8.     echo !var!>>c.txt
  9.     endlocal
  10. )
  11. del a.txt
  12. ren c.txt a.txt
  13. for /f "tokens=*" %%i in (a.txt) do (
  14.     setlocal enabledelayedexpansion
  15.     set "var=%%i"
  16.     set "var=!var:TND=!"
  17.     echo !var!>>c.txt
  18.     endlocal
  19. )
  20. del a.txt
  21. ren c.txt a.txt
复制代码
已测试
作者: battab    时间: 2013-12-9 10:56

  1. @echo off
  2. echo 你他娘的是谁?他娘的我不告诉你。>a.txt
  3. echo 你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。>>a.txt
  4. for /f "tokens=* delims=" %%i in (a.txt) do (
  5. set str=%%i
  6. setlocal enabledelayedexpansion
  7. echo !str:他娘的=TND!
  8. endlocal
  9.                                 )
  10. for /f "tokens=* delims=" %%i in (a.txt) do (
  11. set str=%%i
  12. setlocal enabledelayedexpansion
  13. echo !str:他娘的=!
  14. endlocal
  15.         )
  16. del a.txt
  17. pause>nul
复制代码

作者: 章伯魂    时间: 2014-3-11 15:33

@echo off
echo 原句:
set str1=你他娘的是谁?他娘的我不告诉你。
set str2=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
echo %str1%
echo %str2%
set str3=%str1:他娘的=tnd%
set str4=%str2:他娘的=tnd%
echo.
echo 修改后:
echo %str2%
echo %str4%
pause>nul
作者: sbjugt    时间: 2014-3-11 16:15

echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (set a=%%i&set b=!a:他娘的=TND!&echo !b!>>b.txt)

for /f "delims=" %%i in (a.txt) do (set a=%%i&&set b=!a:他娘的=!&&echo !b!>>b.txt)
pause
作者: a803966    时间: 2014-7-27 14:46

@echo off
setlocal        enabledelayedexpansion
rem 查找并替换内容程序
for /f "tokens=*" %%i in (a.txt) do (
        echo %%i
        set        var=%%i
        set        var=!var:他娘的=TMD!
        echo        !var!
)
endlocal
pause
作者: yuanyannian    时间: 2014-7-27 19:24

我也学着写一个,模仿别人的。直接替换到源文件中。
  1. @Echo Off
  2. set aaa=a.txt
  3. for /f "tokens=*" %%a In ('dir/b %aaa%') do ((for /f "tokens=1* delims=:" %%b in ('Findstr /n .* "%%a"') do (
  4.   set ss=%%c
  5.   setlocal enabledelayedexpansion
  6.   if "!ss!"=="" (echo.) else set ss=!ss:他娘的=TND!&echo !ss!))>ss.txt
  7.   move /y ss.txt "%%a"
  8.   endlocal
  9.   )
  10. for /f "tokens=*" %%a In ('dir/b %aaa%') do ((for /f "tokens=1* delims=:" %%b in ('Findstr /n .* "%%a"') do (
  11.   set ss=%%c
  12.   setlocal enabledelayedexpansion
  13.   if "!ss!"=="" (echo.) else set ss=!ss:TND=!&echo !ss!))>ss.txt
  14.   move /y ss.txt "%%a"
  15.   endlocal
  16.   )
  17. pause
复制代码

作者: bailong360    时间: 2014-7-28 08:55

@echo off
set var1=你他娘的是谁?他娘的我不告诉你。
echo %var1:他娘的=TND%
set var2=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
echo %var2:他娘的=TND%
pause>nul
echo %var2:他娘的=%
echo %var1:他娘的=%
pause>nul
作者: guosuper    时间: 2014-9-29 15:46

::===========================================
::有一文本内容如下:
::a.txt
::你他娘的是谁?他娘的我不告诉你。
::你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
::论坛可是不允许用不文明用语的,请大家先把“他娘的”换成“TND”输出一遍,最后去掉这个不雅的词再输出一遍。
::===========================================
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (a.txt) do (set num=%%i&&set num=!num:他娘的=TND!&&echo !num!)
pause>nul
for /f "tokens=*" %%i in (a.txt) do (set num=%%i&&set num=!num:他娘的=!&&echo !num!)
pause>nul
作者: monsterbatch    时间: 2014-11-2 22:37

setlocal enabledelayedexpansion

set n=1

for /f %%i in (1.txt) do (

        set str=%%i

        set str1=!str:他娘的=TND!

        if !n! equ 1 (echo !str1!>1.txt&set /a n+=1) else echo !str1!>>1.txt
)

pause
作者: shelluserwlb    时间: 2014-11-7 07:57

本帖最后由 shelluserwlb 于 2014-11-7 07:58 编辑
  1. @echo off
  2. for /f "tokens=*" %%a in (a.txt) do (
  3. set str=%%a
  4. call set str=%%str:他娘的=TND%%
  5. call echo %%str%%
  6. )
  7. echo -------------------------------
  8. for /f "tokens=*" %%a in (a.txt) do (
  9. set str=%%a
  10. call set str=%%str:他娘的=%%
  11. call echo %%str%%
  12. )
  13. echo.&pause
复制代码
上面的代码利用call实现变量延迟赋值的效果。
作者: 慕夜蓝化    时间: 2014-12-25 10:32

回复 4# sylovanas

说实话,我对debug这个命令挺好奇的,不过鉴于电脑装的是win764位的,没有这个命令,一直以来都是持观望态度,但是这个除错功能太有用了,有时不知道哪里出了问题,都要来回排查好多遍。。。
作者: 终_焉    时间: 2015-2-25 16:18

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%i in (a.txt) do (
  3. set e=%%i&set e=!e:他娘的=TND!
  4. echo !e!)
  5. pause>nul
  6. @echo off&setlocal enabledelayedexpansion
  7. for /f "tokens=*" %%i in (a.txt) do (
  8. set e=%%i&set e=!e:他娘的=!
  9. echo !e!)
  10. pause>nul
复制代码

作者: dizimotong    时间: 2015-5-1 11:54

  1. @echo off&setlocal EnableDelayedExpansion %关闭回显,设置变量延迟%
  2. set sou_str=他娘的 ::设置想要替换的字符
  3. set dis_str=tnd ::设置替换后的字符
  4. rem 开始进行批量替换
  5. for /f %%i in (test.txt) do (
  6. set str=%%i
  7. set str=!str:%sou_str%=%dis_str%!
  8. echo !str!
  9. )
复制代码

作者: dizimotong    时间: 2015-5-1 12:11

回复 81# dizimotong
自己测试后,发现结果有问题 。自我修改一下
  1. echo off&setlocal EnableDelayedExpansion %关闭回显,设置变量延迟%
  2. rem 该批处理用于批量替换字符
  3. rem 开始进行批量替换
  4. for /f %%i in (test.txt) do (
  5. set str=%%i
  6. set str=!str:他娘的=tnd!
  7. echo !str!
  8. )
复制代码

作者: wutarnow    时间: 2015-10-20 16:00

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%I in (a.txt) do (
  4.     set text=%%I
  5.     echo !text:他娘的=TND!
  6. )
  7. for /f "tokens=*" %%I in (a.txt) do (
  8.     set text=%%I
  9.     echo !text:他娘的=!
  10. )
复制代码

作者: 依山居    时间: 2015-10-21 23:45

python练手
  1. f=open("aa.txt","r")
  2. txt=f.read()
  3. print("这是原文,楼主说这不文明:\r\n",txt)
  4. rtxt=txt.replace("他娘的","TND")
  5. print("→_→替换掉了:\r\n",rtxt)
复制代码
  1. 这是原文,楼主说这不文明:
  2. 你他娘的是谁?他娘的我不告诉你。
  3. 你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
  4. →_→替换掉了:
  5. 你TND是谁?TND我不告诉你。
  6. 你TND到底是谁?我TND还就不告诉那个TND你。
复制代码

作者: sishentibu    时间: 2016-3-31 21:44

一开始忘记变量延迟了。
另,7楼方法win7下是不是没用?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (a.txt) do (
  4. set t=%%i
  5. set w=!t:他娘的=TND!
  6. echo !w!)
  7. echo;
  8. echo 按空格查看第二输出结果
  9. pause>nul
  10. echo;
  11. echo 去掉不雅词
  12. echo;
  13. for /f %%i in (a.txt) do (
  14. set t=%%i
  15. set w=!t:他娘的=!
  16. echo !w!)
  17. pause>nul
复制代码

作者: codegay    时间: 2016-4-1 06:41

  1. #=
  2. julia替换TND.jl
  3. http://bbs.bathome.net/thread-2462-1-1.html
  4. 2016年4月1日 06:18:12 codegay
  5. =#
  6. txt=open(readall,"test.txt")
  7. txt=replace(txt,"他娘的","TND")
  8. println(txt)
  9. txt=replace(txt,"TND","")
  10. print(txt)
复制代码

作者: 胖奇4BAT    时间: 2016-4-17 19:43

@echo off
for /f "tokens=*" %%a in (a.txt) do (               
    SETLOCAL ENABLEDELAYEDEXPANSION   
    set var=%%a
    set newVar=!var:他娘的=TND!                    
    echo !newVar!
)
pause

2.@echo off
for /f "tokens=*" %%a in (a.txt) do (
    SETLOCAL ENABLEDELAYEDEXPANSION
    set var=%%a
    set newVar=!var:他娘的=!
    echo !newVar!
)
pause
作者: lizixian    时间: 2016-11-29 11:04

虽然代码烂但绝对原创
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set line=0
  4. for /f "tokens=1-4 delims=他娘的" %%i in (a.txt) do (
  5. set /a line+=1
  6. if !line! equ 1 echo %%iTND%%jTND%%k
  7. if !line! equ 2 echo %%iTND%%jTND%%kTND%%l
  8. )
  9. endlocal
复制代码

作者: niudd    时间: 2017-2-24 19:07

感觉大家都是很牛的人
作者: wtuldn    时间: 2017-12-31 23:37

@echo off
setlocal EnableDelayedExpansion
for /f "delims=" %%a in (a.txt) do (
  set file=%%a
  set b=!file:他娘的=TND!
  echo !b!>>b.txt
)
for /f "delims=" %%b in (b.txt) do (
  set name=%%b
  set c=!name:TND=!
  echo !c!>>b.txt
)
pause
新手代码,但一定是我自己写的,求指教,谢谢!
作者: 懒虫阿布    时间: 2018-7-22 19:03

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.txt) do (
  4. set  rowcontent=%%i
  5. echo !rowcontent:他娘的=TND!
  6. )
  7. for /f "delims=" %%i in (a.txt) do (
  8. set  rowcontent=%%i
  9. echo !rowcontent:他娘的=!
  10. )
复制代码

作者: 懒虫阿布    时间: 2018-7-22 19:04

中文字符的操作要注意文件编码和命令行窗口的编码是否一致,不一致的场合,会乱码。
作者: impk    时间: 2019-8-16 12:26

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ( a.txt ) do (
  4. set str=%%i
  5. set str=!str:他娘的=tnd!
  6. echo !str!
  7. )
  8. pause
复制代码

作者: 马帅123    时间: 2020-2-24 12:12

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%a in (a.txt) do (
  4. set abc=%%a
  5. echo !abc:他娘的=TND!
  6. echo !abc:他娘的=!
  7. )
  8. pause
复制代码

作者: dzddz    时间: 2020-3-6 10:13

  1. @echo off
  2. echo.
  3. set var1=你他娘的是谁?他娘的我不告诉你。
  4. set var2=你他娘的到底是谁?我他娘的还就不告诉那个他娘的你。
  5. echo.
  6. echo.
  7. echo 原内容:
  8. echo %var1%
  9. echo %var2%
  10. echo.
  11. echo 过滤后的内容(替换):
  12. echo %var1:他娘的=TND%
  13. echo %var2:他娘的=TND%
  14. echo.
  15. echo 再次过滤后的内容(去掉):
  16. echo %var1:他娘的=%
  17. echo %var2:他娘的=%
  18. echo.
  19. pause
  20. exit
复制代码

作者: msdmck    时间: 2021-9-16 10:45

本帖最后由 msdmck 于 2021-9-23 15:59 编辑

有點看不懂...學習一下
英國移民、英國樓盤等事宜成為香港熱話,有英媒整合英國樓價最抵的十大地區可供港人作在英國置業投資英國物業的參考。現時英國樓平均樓價為約23.7萬英鎊。英國房地產很多人都想在英國買樓置業,買英國樓有什麽好處?英國物業投資前景怎麽樣?投放資金到英國物業值得嗎?
許多專門提供SEO服務以及提供網絡營銷策略的SEO公司數碼營銷公司,你又對網絡營銷相關的概念有多少認知呢?SEO收費或會成爲近年企業納入為成本。SEO教學香港自學課程有不少,香港SEO能從提供相關專業服務的SEO廣告公司獲得更高效的幫助。

作者: Fit    时间: 2021-9-16 11:34

@echo off
setlocal enabledelayedexpansion
for /f %%i in (1.txt) do (
   set str=%%i
   echo !str:他娘的=TND!
)
pause
作者: 89343671    时间: 2022-6-17 15:41

@echo off
setlocal enabledelayedexpansion

set const_str="他娘的"

for /f %%i in (test.txt) do (
    set var=%%i
    echo !var:%const_str:~1,-1%=TND!
)
echo.
echo ======分======割======线======
echo.
for /f %%i in (test.txt) do (
    set var=%%i
    echo !var:%const_str:~1,-1%=!
)

pause
作者: allyn    时间: 2022-7-16 20:38

@echo off

setlocal enabledelayedexpansion
for /f %%i in (text.txt) do (       
set a=%%i
echo !a! | findstr "他娘的" && set a=!a:他娘的=TND!
echo !a! >> 输出结果.txt
)
pause


我的这个为什么一定要setlocal enabledelayedexpansion这个,使用%%的形式就是获取不到变量的值,在cmd中又可以
作者: wxf617    时间: 2022-10-18 15:50

本帖最后由 wxf617 于 2022-10-18 17:25 编辑

@ECHO OFF & SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F %%A IN (A.TXT) DO (
    SET str=%%A
    ECHO !str:他娘的=TND!
)
FOR /F %%A IN (A.TXT) DO (
    SET str=%%A
    ECHO !str:他娘的=!
)
pause

仿写二楼大佬的




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2