标题: [文本处理] [已解决]批处理怎样把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
- @echo off
- echo. & echo 注意,被处理的文本编码必须是ANSI编码方式,UTF-8编码或其他编码的文本是无法通过批处理替换其内的内容的。
- echo. & echo 本批处理可以一次性处理多个文件,处理后的文本会生成副本文件,原文件不会删除
- echo. & echo 批处理默认处理txt文本,其他文件请修改代码
- echo. & set /p "str1=请输入被替换的文本:"
- for /f "delims=" %%i in ('dir /b *.txt') do (
- (for /f "delims=" %%j in (%%i) do (
- set "str3=%%j"
- setlocal enabledelayedexpansion
- set "str4=!str3:%str1%=%%~ni!"
- echo !str4!
- setlocal disabledelayedexpansion
- )
- )>>"%%~ni 副本.txt"
- )
- echo. & echo 替换完成,已在批处理所在目录生成新的副本文件
- echo. & pause
复制代码
至于转换编码的部分,你自己找一下软件来进行转码吧。
作者: lancer 时间: 2020-11-13 23:09
- @echo off
- echo. & echo 注意,被处理的文本编码必须是ANSI编码方式,UTF-8编码或其他编码的文本是无法通过批处理替换其内的内容的。
- echo. & echo 本批处理可以一次性处理多个文件,处理后的文本会生成副本文件,原文件不会删除
- echo. & echo 批处理默认处理txt文本,其他文件请修改代码
- echo. & set /p "str1=请输入被替换的文本:"
- for /f "delims=" %%i in ('dir /b *.txt') do (
- (for /f "delims=" %%j in (%%i) do (
- set "str3=%%j"
- setlocal enabledelayedexpansion
- set "str4=!str3:%str1%=%%~ni!"
- echo !str4!
- setlocal disabledelayedexpansion
- )
- )>>"%%~ni 副本.txt"
- )
- echo. & echo 替换完成,已在批处理所在目录生成新的副本文件
- 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 编辑
替换小说之类的较大的文本批处理效率可能不高,可考虑其它方式。- @echo off
- set /p g=请输入所谓的关键词:
- for %%a in (*.txt) do (
- (for /f "delims=" %%i in ('findstr /n .* "%%a"') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:%g%=%%a!"
- set "str=!str:*:=!"
- echo,!str!
- endlocal
- ))>#%%a
- )
- 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
- @echo off
- echo. & echo 注意,被处理的文本编码必须是ANSI编码方式,UTF-8编码或其他编码的文本是无法通过批处理替换其内的内容的。
- echo. & echo 本批处理可以一次性处理多个文件,处理后的文本会生成副本文件,原文件不会删除
- echo. & echo 本批处理默认处理txt文本,不需要指定格式
- echo. & set /p "str1=请输入被替换字符串:"
- echo. & echo 正在替换中,请稍等。。。。。。
- for /f "delims=" %%i in ('dir /b *.txt') do (
- (for /f "delims=" %%j in (%%i) do (
- set "str3=%%j"
- call call set "str4=%%%%str3:%%str1%%=%%~ni%%%%"
- call echo %%str4%%
- )
- )>>"%%~ni 副本.txt"
- )
- echo. & echo 替换完成,已在批处理所在目录生成新的副本文件
- 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 |