Board logo

标题: [文本处理] [已解决]批处理怎样把txt里面的指定关键词修改为txt的名字 [打印本页]

作者: 8532200    时间: 2020-11-12 18:29     标题: [已解决]批处理怎样把txt里面的指定关键词修改为txt的名字

去搜了一下论坛的帖子。没有发现有我需要的答案

求问

比如我的一个目录里面有好多txt

例如

朱雀记1.txt
朱雀记2.txt

里面都有一个关键词是www



求怎么批量把关键词www改成txt的名字

因为文件较多。所以需要批处理


请大神帮忙解决,感激不尽
作者: lancer    时间: 2020-11-13 22:11

本帖最后由 lancer 于 2020-11-13 22:12 编辑

说实话,用批处理去做这个不是很好做,批处理处理txt文本的时候,你的txt文本必须是ANSI格式编码,否则会出现乱码。所以还需要先批量转换你的txt编码为ANSI,然后再替换。至于替换的批处理,倒是好写,不过批量转换编码,需要用到增强型的批处理脚本,你这个需求反而变得复杂了。以我目前的水平,写不了编码转换的部分,需要研究论坛里“批处理之家在线 HTA 脚本”,这个我还没有研究过。
作者: lancer    时间: 2020-11-13 23:07

  1. @echo off
  2. echo. & echo 注意,被处理的文本编码必须是ANSI编码方式,UTF-8编码或其他编码的文本是无法通过批处理替换其内的内容的。
  3. echo. & echo 本批处理可以一次性处理多个文件,处理后的文本会生成副本文件,原文件不会删除
  4. echo. & echo 批处理默认处理txt文本,其他文件请修改代码
  5. echo. & set /p "str1=请输入被替换的文本:"
  6. for /f "delims=" %%i in ('dir /b *.txt') do (
  7. (for /f "delims=" %%j in (%%i) do (
  8. set "str3=%%j"
  9. setlocal enabledelayedexpansion
  10. set "str4=!str3:%str1%=%%~ni!"
  11. echo !str4!
  12. setlocal disabledelayedexpansion
  13. )
  14. )>>"%%~ni 副本.txt"
  15. )
  16. echo. & echo 替换完成,已在批处理所在目录生成新的副本文件
  17. echo. & pause
复制代码
至于转换编码的部分,你自己找一下软件来进行转码吧。
作者: lancer    时间: 2020-11-13 23:09

  1. @echo off
  2. echo. & echo 注意,被处理的文本编码必须是ANSI编码方式,UTF-8编码或其他编码的文本是无法通过批处理替换其内的内容的。
  3. echo. & echo 本批处理可以一次性处理多个文件,处理后的文本会生成副本文件,原文件不会删除
  4. echo. & echo 批处理默认处理txt文本,其他文件请修改代码
  5. echo. & set /p "str1=请输入被替换的文本:"
  6. for /f "delims=" %%i in ('dir /b *.txt') do (
  7. (for /f "delims=" %%j in (%%i) do (
  8. set "str3=%%j"
  9. setlocal enabledelayedexpansion
  10. set "str4=!str3:%str1%=%%~ni!"
  11. echo !str4!
  12. setlocal disabledelayedexpansion
  13. )
  14. )>>"%%~ni 副本.txt"
  15. )
  16. echo. & echo 替换完成,已在批处理所在目录生成新的副本文件
  17. echo. & pause
复制代码
将utf8转码为ansi,这个可以有现成的软件,自己搜一下吧。
作者: 8532200    时间: 2020-11-13 23:55

说实话,用批处理去做这个不是很好做,批处理处理txt文本的时候,你的txt文本必须是ANSI格式编码,否则会出 ...
lancer 发表于 2020-11-13 22:11



    非常感谢大神回复。。其实我已经有类似脚本。。。就是不完美
作者: 8532200    时间: 2020-11-14 00:07

将utf8转码为ansi,这个可以有现成的软件,自己搜一下吧。
lancer 发表于 2020-11-13 23:09



    首先感谢回复。。实测失败。
这个没办法修改指定关键词为文件名的名字

实测运行后。仅仅是提取了关键词,然后改成了文件名

这是实际运行后打开txt的结果。新的txt变成了只有这几个字 了



str3:=朱雀记1
str3:=朱雀记1
str3:=朱雀记1
str3:=朱雀记1
str3:=朱雀记1
str3:=朱雀记1
作者: lancer    时间: 2020-11-14 00:18

回复 6# 8532200


    你输入www就可以了,是不是输入错了
作者: lancer    时间: 2020-11-14 00:19

回复 6# 8532200


    另外,你需要确认你的txt文本的编码是ANSI,如果是UTF-8是不能正常替换的
作者: 8532200    时间: 2020-11-14 00:57

回复  8532200


    另外,你需要确认你的txt文本的编码是ANSI,如果是UTF-8是不能正常替换的
lancer 发表于 2020-11-14 00:19



    放心。。。。我的步骤都没有错的。。。


是把关键词修改为文件名名称。。不是提取关键词


不是所有关键词都是www



不管www还是其他我都测试过了。还把结果复制出来给你看了。。

确实是失败的。。。但是还是非常感谢你的帮助




我有类似脚本。。你可以看看



这是批量修改指定txt的指定关键词为文件夹名称的。。。



@echo off
set "srcStr=qwert"
PowerShell "dir . -Filter *.txt -Recurse | forEach{$str=(type $_.FullName -ReadCount 0) -join \"`r`n\"; sc $_.FullName $str.Replace('%srcStr%', $_.Directory.Name)}"
pause




把txt里面的qwert改为文件夹的名字。。。支持批量以及之文件夹


所以我想问问有没有同类型的


把txt里面的关键词改为txt文件名的bat
没有我也有上面的勉强够用


总之。。感谢你的回复
作者: lancer    时间: 2020-11-14 08:37

回复 9# 8532200


    你直接放2个文本上来,我修改一下代码
作者: 8532200    时间: 2020-11-14 10:06

回复  8532200


    你直接放2个文本上来,我修改一下代码
lancer 发表于 2020-11-14 08:37



    我已经把www那一栏改为了qwert


你试试吧,谢谢了



链接: https://pan.baidu.com/s/1A5lUXvzZKbjqqukO7jAcJg 提取码: 4npi 复制这段内容后打开百度网盘手机App,操作更方便哦





需要结果是

根据关键词修改为txt文件名的名字
作者: qixiaobin0715    时间: 2020-11-14 10:21

本帖最后由 qixiaobin0715 于 2020-11-14 11:09 编辑

替换小说之类的较大的文本批处理效率可能不高,可考虑其它方式。
  1. @echo off
  2. set /p g=请输入所谓的关键词:
  3. for %%a in (*.txt) do (
  4.     (for /f "delims=" %%i in ('findstr /n .* "%%a"') do (
  5.         set "str=%%i"
  6.         setlocal enabledelayedexpansion
  7.         set "str=!str:%g%=%%a!"
  8.         set "str=!str:*:=!"
  9.         echo,!str!
  10.         endlocal
  11.     ))>#%%a
  12. )
  13. pause
复制代码

作者: lancer    时间: 2020-11-14 10:47

回复 11# 8532200


    压缩文件需要密码
作者: 8532200    时间: 2020-11-14 10:52

回复  8532200


    压缩文件需要密码
lancer 发表于 2020-11-14 10:47



    解压密码是8


忘记说了
作者: 8532200    时间: 2020-11-14 10:56

本帖最后由 8532200 于 2020-11-14 10:58 编辑
替换小说之类的较大的文本批处理效率可能不高,可考虑其它方式。
qixiaobin0715 发表于 2020-11-14 10:21



    这是测试结果


=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt
=朱雀记1.txt







实测还是失败




我txt和bat都是ANSI格式,而且里面只有一个qwert


我上面有一个bat例子


不过是根据关键词替换成文件夹名字的。只能文件夹


已经很好用了。。但是还是想问问有没有大神可以弄直接关键词修改为txt文件名的

不过感谢你的回复
作者: lancer    时间: 2020-11-14 11:07

  1. @echo off
  2. echo. & echo 注意,被处理的文本编码必须是ANSI编码方式,UTF-8编码或其他编码的文本是无法通过批处理替换其内的内容的。
  3. echo. & echo 本批处理可以一次性处理多个文件,处理后的文本会生成副本文件,原文件不会删除
  4. echo. & echo 本批处理默认处理txt文本,不需要指定格式
  5. echo. & set /p "str1=请输入被替换字符串:"
  6. echo. & echo 正在替换中,请稍等。。。。。。
  7. for /f "delims=" %%i in ('dir /b *.txt') do (
  8. (for /f "delims=" %%j in (%%i) do (
  9. set "str3=%%j"
  10. call call set "str4=%%%%str3:%%str1%%=%%~ni%%%%"
  11. call echo %%str4%%
  12. )
  13. )>>"%%~ni 副本.txt"
  14. )
  15. echo. & echo 替换完成,已在批处理所在目录生成新的副本文件
  16. echo. & pause
复制代码
ok了,我没想到你要替换的是小说,里面的文本数量太多了,超出了setlocal递归数量,现在换了。已经可以了。
作者: qixiaobin0715    时间: 2020-11-14 11:31

回复 15# 8532200
用你提供的文本测试也没问题啊。点击代码最下面的“复制代码”,再粘贴试试。不要直接复制。
作者: 8532200    时间: 2020-11-15 22:54

回复  8532200
用你提供的文本测试也没问题啊。点击代码最下面的“复制代码”,再粘贴试试。不要直接复制 ...
qixiaobin0715 发表于 2020-11-14 11:31



    没事。。其实我上面已经有类似代码、。。不过只能文件夹的。。。总之非常感谢你们




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