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

[文件操作] [已解决]如何根据文本条件判断,进行指定重命名?

[复制链接]
发表于 2022-3-18 13:38:52 | 显示全部楼层 |阅读模式
本帖最后由 czvde 于 2022-3-24 17:25 编辑

例子
文件夹中有N个文件:
dbcd123.mp4
……
znn109.jpg

调用a.txt的数据进行添加
dbcd,1655一二
dfcdf99,012345DDD
znn1,DDD0123

bat运行效果:
视频1655一二__123--(720x480)——dbcd123.mp4
……
图片DDD0123__123--(1400x1200)——znn19.jpg

已解决!!
发表于 2022-3-20 16:22:29 | 显示全部楼层
本帖最后由 idwma 于 2022-3-20 17:02 编辑

  1. #@&cls&powershell "type %~s0|out-string|iex"&pause&exit
  2. $a=gc a.txt
  3. $shell=(new-object -com Shell.Application).namespace("$pwd")
  4. $a|%{
  5. $n=$_ -split ','
  6. $shell.items()|?{$_.name -eq $(gi "$($n[0])*").name}|{
  7. $wh=if($shell.GetDetailsOf($_, 31) -ne ''){
  8. $shell.GetDetailsOf($_, 31) -split 'x' -replace '[^\d]'
  9. $type='视频'
  10. }elseif($shell.GetDetailsOf($_, 285) -ne ''){
  11. $shell.GetDetailsOf($_, 285)
  12. $shell.GetDetailsOf($_, 283)
  13. $type='图片'
  14. }
  15. if($wh -ne $null){
  16. $nn='{0:d6}' -f [int]$($_.name -replace "$n[0]" -split '.')[0]
  17. ren $_.name $('{0}{1}__{2}--({3}x{4})--{5}' -f $type,$n[1],$nn,$wh[0],$wh[1],$_.name)
  18. rv wh
  19. }
  20. }
  21. }
复制代码

评分

参与人数 1技术 +1 收起 理由
czvde + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-3-20 17:05:48 | 显示全部楼层
回复 2# idwma


    无法重命名,出现以下提示

  1. Invoke-Expression : 只允许将表达式作为管道的第一个元素。
  2. 所在位置 行:1 字符: 36
  3. + type d:\测试\a.bat|out-string|iex <<<<
  4.     + CategoryInfo          : ParserError: (:) [Invoke-Expression], ParseExcep
  5.    tion
  6.     + FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline,Microsoft.Power
  7.    Shell.Commands.InvokeExpressionCommand

  8. 请按任意键继续. . .
复制代码
发表于 2022-3-20 17:24:14 | 显示全部楼层
回复 3# czvde


    第6行最后的{前面少了个%加上去
  1. $shell.items()|?{$_.name -eq $(gi "$($n[0])*").name}|%{
复制代码
 楼主| 发表于 2022-3-20 17:38:23 | 显示全部楼层
回复 4# idwma


    现在能运行
  1. 请按任意键继续. . .
复制代码
但运行批处理之后,所有文件名都没有变(还是原文件名,没有进行重命名)
发表于 2022-3-20 17:40:16 | 显示全部楼层
回复 5# czvde


    再多试几次
 楼主| 发表于 2022-3-20 17:50:05 | 显示全部楼层
回复 6# idwma


    多次运行批处理,还是没有(重命名)反应
发表于 2022-3-20 18:09:55 | 显示全部楼层
回复 7# czvde

没有环境测试,可能代码不符合你的情况吧
发表于 2022-3-20 20:11:17 | 显示全部楼层
本帖最后由 5i365 于 2022-3-20 20:34 编辑

回复 8# idwma


   大侠好, 我找了两段代码
图像分辨率获取
add-type -AssemblyName System.Drawing
$png = New-Object System.Drawing.Bitmap 'C:\365.png'
$png.Height
$png.Width



视频分辨率获取, 要下载个文件https://wss1.cn/f/7vlul0vhtt9 复制链接到浏览器打开
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 test.mp4
结果是csv格式的
1920,1080
--------------------------
另一种格式
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of default=nw=1 test.mp4

结果是这样的
width=1920
height=1080
发表于 2022-3-20 21:18:06 | 显示全部楼层
test.bat
ansi编码,注意备份
  1. #&cls&@cd /d "%~dp0" & powershell -c "Get-Content '%~0' | Out-String | Invoke-Expression" & pause&exit
  2. $shell = New-Object -ComObject 'Shell.Application'
  3. $folder = $shell.NameSpace($PWD.Path)
  4. #打开txt
  5. $txts = Get-Content 'a.txt'
  6. #找索引
  7. $i = $index1 = $index2 = $index3 = $index4 = 0
  8. while(!($index1 -and $index2 -and $index3 -and $index4)){
  9.         if($folder.GetDetailsOf($null,$i) -eq '高度'){
  10.                 $index1 = $i
  11.         }
  12.         elseif($folder.GetDetailsOf($null,$i) -eq '宽度'){
  13.                 $index2 = $i
  14.         }
  15.         elseif($folder.GetDetailsOf($null,$i) -eq '帧高度'){
  16.                 $index3 = $i
  17.         }
  18.         elseif($folder.GetDetailsOf($null,$i) -eq '帧宽度'){
  19.                 $index4 = $i
  20.         }
  21.         ++$i
  22. }
  23. #重命名
  24. $folder.Items() | foreach {
  25.         $__ = $_
  26.         $t = $name = $null
  27.         if($_.Name -match '^(.*?)\d+\.((png)|(jpg))$'){
  28.                 $t = '图片'; $name = $Matches[1]; $a = $index1; $b = $index2
  29.         }
  30.         elseif ($_.Name -match '^(.*?)\d+\.mp4$'){
  31.                 $t = '视频'; $name = $Matches[1]; $a = $index3; $b = $index4
  32.         }
  33.         if($t -ne $null -and $a -match '\d'){
  34.                 $b_find = $true
  35.                 $txts | foreach{
  36.                         if($b_find -and ($_ -match ('^{0}\d*,(.*?)$' -f $name)) ){
  37.                                 $h = $folder.GetDetailsOf($__,$a) -replace '[^\d]',''
  38.                                 $w = $folder.GetDetailsOf($__,$b) -replace '[^\d]',''
  39.                                 $new_name = '{0}{1}__123--({2}x{3})——{4}' -f $t,$Matches[1],$h,$w,$__.Name
  40.                                 $__.Name
  41.                                 $new_name
  42.                                 Rename-Item $__.Path $new_name
  43.                                 $b_find = $false
  44.                                 '---------------------------'
  45.                         }
  46.                 }
  47.         }
  48. }
复制代码

评分

参与人数 1技术 +1 收起 理由
czvde + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-3-21 18:35:41 | 显示全部楼层
回复 10# went
  1. 请按任意键继续. . .
复制代码
出现以下情况:
运行bat之后,所有文件名都没有变
发表于 2022-3-22 10:31:50 | 显示全部楼层
回复 11# czvde


    图片,视频,a.txt,bat文件
    都放在一个文件夹里运行
 楼主| 发表于 2022-3-22 12:04:10 | 显示全部楼层
本帖最后由 czvde 于 2022-3-22 21:32 编辑

回复 12# went


    都是放在同一个文件夹中测试,就是没有效果
发表于 2022-3-22 20:46:02 | 显示全部楼层
回复 13# czvde


    测试正常,你只有想其他办法了
 楼主| 发表于 2022-3-22 21:45:10 | 显示全部楼层
本帖最后由 czvde 于 2022-3-23 23:52 编辑

回复 14# went


    可能是我这边系统问题吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 05:51 , Processed in 0.031154 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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