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

[文件操作] 【已解决】批处理如何删除及修改具有下面特征的文件?

本帖最后由 qixiaobin0715 于 2019-9-28 09:52 编辑

文件夹中的文件均为jpg文件,文件名均为英文字母组成无空格,要求如下:
1.先将文件按文件列表重命名:
文件形式如下:
  1. awaketo.jpg
  2. awareof.jpg
  3. backandforth.jpg
  4. backaway.jpg
复制代码
按文件列表重命名,文件列表是一个txt文件,形式如下:
  1. awake to
  2. aware of
  3. back and forth
  4. back away
复制代码
文件列表都是词组,含有空格,而文件无空格,顺序不一定一致。文件数量要比列表中的数量多得多。
2.然后删除文件名由12及以上个字母组成的文件,12个字母以下的保留,文件名含有空格的文件保留。

这两天写了两个脚 按房间号批量抓取虎牙和斗鱼的直播源,默认按网站的最高码率。播放很流畅。
刚弄完了,路过酱油一下, pwoershell 运行:
  1. $files = (gc 列表.log -ReadCount 0) | % { @{name = $_.trim(); noEmpty = $_ -replace '\s+' } }
  2. Get-ChildItem '.\*.jpg' | foreach {
  3. if ($_.BaseName -in $files.noEmpty) {
  4. foreach ($a in $files) {
  5. if ($_.BaseName -eq $a.noEmpty) {
  6. ren $_.FullName  -NewName ($a.name + $_.Extension) -Force -verb;
  7. break;
  8. }
  9. }
  10. }
  11. else {
  12. if (($_.BaseName -notmatch '\s+') -and ($_.BaseName.Length -ge 12)) {
  13. del $_.FullName -verb -Force;
  14. }
  15. }
  16. }
复制代码
===============先测试一下============
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

本帖最后由 qixiaobin0715 于 2019-9-26 09:19 编辑

回复 2# xczxczxcz
不知什么原因,直接闪退。
PowerShell v1.0

TOP

回复 3# qixiaobin0715


    你用的XP系统吗?如果是Win7或Win10的话,升级到高版本的PowerShell试试呢
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. mode con lines=3000
  3. set info=互助互利,支付宝扫码头像,感谢打赏
  4. rem 有问题,可加QQ956535081及时沟通
  5. title %info%
  6. cd /d "%~dp0"
  7. set "txtfile=列表.txt"
  8. >"%tmp%\1.t" echo;while(!WSH.StdIn.AtEndOfStream){var f=WSH.StdIn.ReadLine();WSH.echo(f.replace(/\s/g,'')+"|"+f);}
  9. for /f "tokens=1* delims=|" %%a in ('type "%txtfile%"^|cscript -nologo -e:jscript "%tmp%\1.t"') do (
  10.     if exist "%%a.jpg" (
  11.         echo;"%%a.jpg" --^> "%%b.jpg"
  12.         ren "%%a.jpg" "%%b.jpg"
  13.     )
  14. )
  15. >"%tmp%\1.t" echo;while(!WSH.StdIn.AtEndOfStream){var f=WSH.StdIn.ReadLine();if(/^^[a-z]{12,}$/i.test(f)){WSH.echo(f);}}
  16. (for /f "delims=" %%a in ('dir /a-d/b *.jpg') do echo;%%~na)>"%tmp%\t.t"
  17. for /f "delims=" %%a in ('type "%tmp%\t.t"^|cscript -nologo -e:jscript "%tmp%\1.t"') do (
  18.     echo;--^> "%%a.jpg"
  19.     del /a /f /q "%%a.jpg"
  20. )
  21. echo;%info%
  22. pause
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 4# Batcher

win7。有是可能powershell版本低的问题。谢谢!

TOP

回复 5# zaqmlp

少量测试效果不错!谢谢了

TOP

回复 7# qixiaobin0715

谢没啥用,还是红包实际
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 5# zaqmlp

back and forth好像没有重命名

TOP

回复 9# qixiaobin0715

不清楚你的情况,实测没问题, 可以联系我q
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

这个意思吗?
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('dir /b /a-d *.jpg') do (
  3.       set /p "str="
  4.       if "!str!" neq ""  (
  5.          echo; ren %%a "!str!.jpg"
  6.       ) else (
  7.           set "file=%%~na"
  8.           if "!file: =!" equ "!file!"  if "!file:~12!" neq "" echo;del %%a
  9.       )
  10.       set "str="
  11. ))<文件列表.txt
  12. pause & exit
复制代码

TOP

回复 10# zaqmlp
不好意思,是自己的文件名列表的问题。献上红包一个。请完善功能:
1.将修改过的文件直接移到(非拷贝)新文件夹中,如D:\pic。
2.在当前文件夹中生成重命名文件名成功的列表以及被删除文件的文件名列表。

TOP

回复 11# terse


    顺序不一定一致,这样可能不适合楼主的情况。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# qixiaobin0715


试试这样可以吗
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. type nul > "重命名文件名成功的列表.txt"
  4. type nul > "被删除文件的文件名列表.txt"
  5. for /f "delims=" %%i in ('type "文件列表.txt"') do (
  6.     set "NewName=%%i"
  7.     set "NoBlank=!NewName: =!"
  8.     if exist "!NoBlank!.jpg" (
  9.         ren "!NoBlank!.jpg" "!NewName!.jpg"
  10.         >> "重命名文件名成功的列表.txt" echo "!NoBlank!.jpg" "!NewName!.jpg"
  11.         if "!NewName:~12!" neq "" (
  12.             del /f /q "!NewName!.jpg"
  13.             >> "被删除文件的文件名列表.txt" echo "!NewName!.jpg"
  14.         ) else (
  15.             move /y "!NewName!.jpg" "D:\pic"
  16.         )
  17.     )
  18. )
  19. for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
  20.     set "file=%%~ni"
  21.     if "!file: =!" equ "!file!" (
  22.         if "!file:~12!" neq "" (
  23.             del /f /q "%%i"
  24.             >> "被删除文件的文件名列表.txt" echo "%%i"
  25.         )
  26.     )
  27. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 14# Batcher

完美,速度很快,非常感谢!!!

TOP

返回列表