找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 112230|回复: 30

[文本处理] 【已解决】批处理如何提取两个关键词之间的信息然后以此重命名文件名?

[复制链接]
发表于 2019-1-29 16:39:09 | 显示全部楼层 |阅读模式
本帖最后由 ziranww 于 2019-2-11 13:29 编辑

非常感谢论坛里热心的朋友们,特别是@flashercs帮我几次完善了脚本,非常感谢,问题解决了
最终完善版脚本在23楼http://www.bathome.net/redirect. ... 1962&pid=217302
有类似需求的朋友可以参考一下

--------------------------------------
RT,有大量文件需要重命名,改成TXT后发现了一些规律,从其中能提取到有用的信息用于重命名文件。于是在网上查,找到了一款神奇的软件Replace Pioneer,但是研究数个小时后还是没有搞定
看了半天官网上的规则和示例,折腾了几个小时未果。于是在网上查到了论坛,求高手帮忙

需要改名的文件改成TXT打开后是这样的:
  1. 乱码
  2. abcd 乱码 name 乱码 efgh
  3. 乱码
复制代码
说明:
abcd:文件名标记信息开始
efgh:文件名标记信息结束
name:用于提取后重命名到文件名

谢谢了
 楼主| 发表于 2019-1-29 16:53:47 | 显示全部楼层
用notepad++打开是这样的,红圈部分是需要提取的文件名
发表于 2019-1-29 19:07:33 | 显示全部楼层
应该不难。但无真实信息又没有样本,又是挤牙膏的节奏。
 楼主| 发表于 2019-1-30 08:52:11 | 显示全部楼层
回复 4# flashercs


    谢谢兄弟,执行后没有成功,关了echo后看到有提示

ECHO 处于打开状态。

E:\test>set "dir=E:\test"

E:\test>powershell.exe -Command "(Select-String -Path 'E:\test\*.*' -Pattern '(?<=model_name\x00)[^\x00]+(?=\x00.*?disp_out1_info)' -Encoding default)|{Rename-Item -LiteralPath $_.Path -NewName $_.Matches[0].Value}"
所在位置 行:1 字符: 119
+ ... ng default)|{Rename-Item -LiteralPath $_.Path -NewName $_.Matches[0]. ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
只允许将表达式作为管道的第一个元素。
    + CategoryInfo          : ParserError: ( [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline
发表于 2019-1-30 13:11:28 | 显示全部楼层
perl  python 正则表达式,写个脚本就是了
 楼主| 发表于 2019-1-30 14:04:30 | 显示全部楼层
回复 6# zuodx


    这个更不会了
发表于 2019-1-30 14:19:25 | 显示全部楼层
回复 6# ziranww

a.bat

  1. @echo off
  2. set "dir=E:\test"
  3. powershell.exe -Command "(Select-String -Path '%dir%\*.*' -Pattern '(?<=model_name\x00)[^\x00]+(?=\x00.*?disp_out1_info)' -Encoding default)|Foreach-object{Rename-Item -LiteralPath $_.Path -NewName $_.Matches[0].Value}"
复制代码
 楼主| 发表于 2019-1-30 14:38:09 | 显示全部楼层
回复 7# flashercs


    兄弟,现在没有报错了,但是执行后没有改名
发表于 2019-1-30 15:00:35 | 显示全部楼层
好像没有规律可循,不好办;因为乱码部分是随机乱码。
 楼主| 发表于 2019-1-30 15:14:00 | 显示全部楼层
回复 9# flashercs


    还是谢谢兄弟了
发表于 2019-1-30 16:35:26 | 显示全部楼层
本帖最后由 523066680 于 2019-1-30 16:55 编辑

回复 9# flashercs

    正则应该有一种占位符用来表达常见字符或者明文以外的符号。
在Perl里面是 \p{组合属性},因为Perl基本很多人没装,就不安利楼主了。

丢个砖头
  1. my $s = join('', map { chr } 0..127 );
  2. $s =~s/\p{IsCntrl}//g;
  3. print $s;
复制代码
过滤后的结果
  1. !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
复制代码
建议楼主把eps文件压缩上传到某个网盘让大家下载看看,我用ai和coreldraw导出的eps文件并没有看到类似字段,没法测试。

如果按截图中处理的话大概会这么写
~/model_name\p{IsCntrl}+(.*)\p{IsCntrl}/;
取 $1
发表于 2019-1-30 17:39:23 | 显示全部楼层
本帖最后由 lanfogz 于 2019-1-30 17:51 编辑

我的想法:先过滤乱码,再进行处理。

有个小工具(https://pan.baidu.com/s/1jIrZ5pB9wYyaFhx70GfScw),执行“smooth 文件名”
可以把结果粘贴上来,看看效果


理想的效果是:
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f %%i in ('smooth %1 ^|findstr model_name') do (
  3.         set c=%%i
  4.         rename %1 !c:10!
  5.         goto:break
  6. )
  7. :break
复制代码
发表于 2019-1-30 19:02:34 | 显示全部楼层
光看图片,猜测所谓的“乱码”指的是 [\x00-\x1F\x7F\x80-\xFF]
也就是 .net 正则中的 [\p{Cc}\p{IsLatin-1Supplement}]

评分

参与人数 1技术 +1 收起 理由
523066680 + 1 周到

查看全部评分

发表于 2019-1-31 00:35:03 | 显示全部楼层
本帖最后由 flashercs 于 2019-1-31 09:58 编辑

由NULxE0NUL判断
这是utf8编码打开npp
而utf8编码下,\xE0\x00不存在编码位置,故替换为\xFFFD;
其他乱码同理:
所以文本分隔符应该是控制字符的[\x00-0x1f]和替换符\xFFFD
  1. @echo off
  2. set "dir=E:\test"
  3. powershell.exe -Command "(Select-String -Path "%dir%\*.*" -Pattern '(?<=model_name[\x00-\x1F\uFFFD]+)[^\x00-\x1F\uFFFD]+(?=[\x00-\x1F\uFFFD]*disp_outl_info)' -Encoding utf8)|Foreach-object{Rename-Item -LiteralPath $_.Path -NewName ($_.Matches[0].Value+[System.IO.Path]::GetExtension($_.Path))}"
复制代码
 楼主| 发表于 2019-1-31 09:23:49 | 显示全部楼层
非常感谢论坛里热心的网友,已上传样本文件
是creo的prt文件

通过winhex打开看到情况是这样的,我现在通过replace pineer这个软件处理了一下文件,只能通过固定数量字符窜长度实现了一部分文件的提取后重命名,但是还是不完美,发现里面有许多文件命名长度不一样,最完美的是过滤掉乱码,提取两个字符中间的内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 00:42 , Processed in 0.033924 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表