[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

已解决!!

回复 17# czvde
  1. @echo off
  2. REM 根据自己电脑实际情况设置ffmpeg的路径
  3. set "path=C:\Program Files\ffmpeg-n4.4-83-gb1f2d203c0-win64-gpl-4.4\bin;%path%"
  4. setlocal enabledelayedexpansion
  5. cd /d "%~dp0"
  6. for /f "tokens=1-2 delims=," %%i in ('type "a.txt"') do (
  7.     for /f "delims=" %%a in ('dir /b /a-d *.mp4 *.jpg *.png ^| findstr /v /i /b /c:"视频" /c:"图片" ^| findstr /i /b "%%i"') do (
  8.         if /i "%%~xa" equ ".mp4" (
  9.             call :GetVideoInfo "%%a"
  10.             ren "%%a" "视频%%j__123--(!str!)——%%a"
  11.         ) else if /i "%%~xa" equ ".jpg" (
  12.             call :GetJpgInfo "%%a"
  13.             ren "%%a" "图片%%j__123--(!str!)——%%a"
  14.         ) else if /i "%%~xa" equ ".png" (
  15.             call :GetPngInfo "%%a"
  16.             ren "%%a" "图片%%j__123--(!str!)——%%a"
  17.         )
  18.     )
  19. )
  20. goto :eof
  21. :GetVideoInfo
  22. for /f "tokens=10" %%x in ('ffmpeg -i "%~1" 2^>^&1 ^| find "Video:"') do (
  23.     set "str=%%x"
  24. )
  25. goto :eof
  26. :GetJpgInfo
  27. for /f "tokens=8" %%x in ('ffmpeg -i "%~1" 2^>^&1 ^| find "Video:"') do (
  28.     set "str=%%x"
  29. )
  30. goto :eof
  31. :GetPngInfo
  32. for /f "tokens=6" %%x in ('ffmpeg -i "%~1" 2^>^&1 ^| find "Video:"') do (
  33.     set "str=%%x"
  34. )
  35. goto :eof
复制代码
1

评分人数

    • czvde: 乐于助人技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 czvde 于 2022-3-24 17:24 编辑

回复 16# Batcher

感谢

TOP

回复 1# czvde


    文件名根据什么规律跟a.txt对应?看起来每一个都不一样啊
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 czvde 于 2022-3-23 23:52 编辑

回复 14# went


    可能是我这边系统问题吧

TOP

回复 13# czvde


    测试正常,你只有想其他办法了

TOP

本帖最后由 czvde 于 2022-3-22 21:32 编辑

回复 12# went


    都是放在同一个文件夹中测试,就是没有效果

TOP

回复 11# czvde


    图片,视频,a.txt,bat文件
    都放在一个文件夹里运行

TOP

回复 10# went
  1. 请按任意键继续. . .
复制代码
出现以下情况:
运行bat之后,所有文件名都没有变

TOP

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

评分人数

    • czvde: 乐于助人技术 + 1

TOP

本帖最后由 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
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 7# czvde

没有环境测试,可能代码不符合你的情况吧

TOP

回复 6# idwma


    多次运行批处理,还是没有(重命名)反应

TOP

回复 5# czvde


    再多试几次

TOP

回复 4# idwma


    现在能运行
  1. 请按任意键继续. . .
复制代码
但运行批处理之后,所有文件名都没有变(还是原文件名,没有进行重命名)

TOP

返回列表