标题: [文件操作] 【已解决】批处理如何删除及修改具有下面特征的文件? [打印本页]
作者: qixiaobin0715 时间: 2019-9-25 13:00 标题: 【已解决】批处理如何删除及修改具有下面特征的文件?
本帖最后由 qixiaobin0715 于 2019-9-28 09:52 编辑
文件夹中的文件均为jpg文件,文件名均为英文字母组成无空格,要求如下:
1.先将文件按文件列表重命名:
文件形式如下:- awaketo.jpg
- awareof.jpg
- backandforth.jpg
- backaway.jpg
复制代码
按文件列表重命名,文件列表是一个txt文件,形式如下:- awake to
- aware of
- back and forth
- back away
复制代码
文件列表都是词组,含有空格,而文件无空格,顺序不一定一致。文件数量要比列表中的数量多得多。
2.然后删除文件名由12及以上个字母组成的文件,12个字母以下的保留,文件名含有空格的文件保留。
作者: xczxczxcz 时间: 2019-9-25 17:37
这两天写了两个脚 按房间号批量抓取虎牙和斗鱼的直播源,默认按网站的最高码率。播放很流畅。
刚弄完了,路过酱油一下, pwoershell 运行:- $files = (gc 列表.log -ReadCount 0) | % { @{name = $_.trim(); noEmpty = $_ -replace '\s+' } }
- Get-ChildItem '.\*.jpg' | foreach {
- if ($_.BaseName -in $files.noEmpty) {
- foreach ($a in $files) {
- if ($_.BaseName -eq $a.noEmpty) {
- ren $_.FullName -NewName ($a.name + $_.Extension) -Force -verb;
- break;
- }
- }
- }
- else {
- if (($_.BaseName -notmatch '\s+') -and ($_.BaseName.Length -ge 12)) {
- del $_.FullName -verb -Force;
- }
- }
- }
复制代码
===============先测试一下============
作者: qixiaobin0715 时间: 2019-9-26 09:13
本帖最后由 qixiaobin0715 于 2019-9-26 09:19 编辑
回复 2# xczxczxcz
不知什么原因,直接闪退。
PowerShell v1.0
作者: Batcher 时间: 2019-9-26 13:26
回复 3# qixiaobin0715
你用的XP系统吗?如果是Win7或Win10的话,升级到高版本的PowerShell试试呢
作者: zaqmlp 时间: 2019-9-26 13:59
- @echo off
- mode con lines=3000
- set info=互助互利,支付宝扫码头像,感谢打赏
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- cd /d "%~dp0"
- set "txtfile=列表.txt"
- >"%tmp%\1.t" echo;while(!WSH.StdIn.AtEndOfStream){var f=WSH.StdIn.ReadLine();WSH.echo(f.replace(/\s/g,'')+"|"+f);}
- for /f "tokens=1* delims=|" %%a in ('type "%txtfile%"^|cscript -nologo -e:jscript "%tmp%\1.t"') do (
- if exist "%%a.jpg" (
- echo;"%%a.jpg" --^> "%%b.jpg"
- ren "%%a.jpg" "%%b.jpg"
- )
- )
- >"%tmp%\1.t" echo;while(!WSH.StdIn.AtEndOfStream){var f=WSH.StdIn.ReadLine();if(/^^[a-z]{12,}$/i.test(f)){WSH.echo(f);}}
- (for /f "delims=" %%a in ('dir /a-d/b *.jpg') do echo;%%~na)>"%tmp%\t.t"
- for /f "delims=" %%a in ('type "%tmp%\t.t"^|cscript -nologo -e:jscript "%tmp%\1.t"') do (
- echo;--^> "%%a.jpg"
- del /a /f /q "%%a.jpg"
- )
- echo;%info%
- pause
复制代码
作者: qixiaobin0715 时间: 2019-9-26 15:03
回复 4# Batcher
win7。有是可能powershell版本低的问题。谢谢!
作者: qixiaobin0715 时间: 2019-9-26 15:04
回复 5# zaqmlp
少量测试效果不错!谢谢了
作者: zaqmlp 时间: 2019-9-26 16:08
回复 7# qixiaobin0715
谢没啥用,还是红包实际
作者: qixiaobin0715 时间: 2019-9-26 17:31
回复 5# zaqmlp
back and forth好像没有重命名
作者: zaqmlp 时间: 2019-9-26 18:41
回复 9# qixiaobin0715
不清楚你的情况,实测没问题, 可以联系我q
作者: terse 时间: 2019-9-26 22:36
这个意思吗?- @echo off & setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('dir /b /a-d *.jpg') do (
- set /p "str="
- if "!str!" neq "" (
- echo; ren %%a "!str!.jpg"
- ) else (
- set "file=%%~na"
- if "!file: =!" equ "!file!" if "!file:~12!" neq "" echo;del %%a
- )
- set "str="
- ))<文件列表.txt
- pause & exit
复制代码
作者: qixiaobin0715 时间: 2019-9-27 12:50
回复 10# zaqmlp
不好意思,是自己的文件名列表的问题。献上红包一个。请完善功能:
1.将修改过的文件直接移到(非拷贝)新文件夹中,如D:\pic。
2.在当前文件夹中生成重命名文件名成功的列表以及被删除文件的文件名列表。
作者: Batcher 时间: 2019-9-28 09:09
回复 11# terse
顺序不一定一致,这样可能不适合楼主的情况。
作者: Batcher 时间: 2019-9-28 09:28
回复 12# qixiaobin0715
试试这样可以吗- @echo off
- setlocal enabledelayedexpansion
- type nul > "重命名文件名成功的列表.txt"
- type nul > "被删除文件的文件名列表.txt"
- for /f "delims=" %%i in ('type "文件列表.txt"') do (
- set "NewName=%%i"
- set "NoBlank=!NewName: =!"
- if exist "!NoBlank!.jpg" (
- ren "!NoBlank!.jpg" "!NewName!.jpg"
- >> "重命名文件名成功的列表.txt" echo "!NoBlank!.jpg" "!NewName!.jpg"
- if "!NewName:~12!" neq "" (
- del /f /q "!NewName!.jpg"
- >> "被删除文件的文件名列表.txt" echo "!NewName!.jpg"
- ) else (
- move /y "!NewName!.jpg" "D:\pic"
- )
- )
- )
- for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
- set "file=%%~ni"
- if "!file: =!" equ "!file!" (
- if "!file:~12!" neq "" (
- del /f /q "%%i"
- >> "被删除文件的文件名列表.txt" echo "%%i"
- )
- )
- )
复制代码
作者: qixiaobin0715 时间: 2019-9-28 09:51
回复 14# Batcher
完美,速度很快,非常感谢!!!
作者: qixiaobin0715 时间: 2019-9-28 10:06
回复 14# Batcher
等等,顺序好像有点问题。应当先重命名并移动,然后再删除符合条件的图片。这里againandagain.jpg应当重命名为again and again.jpg并移动到指定文件夹,重命名前被删除。
作者: Batcher 时间: 2019-9-28 10:16
回复 16# qixiaobin0715
是这个意思吗- @echo off
- setlocal enabledelayedexpansion
- type nul > "重命名文件名成功的列表.txt"
- type nul > "被删除文件的文件名列表.txt"
- for /f "delims=" %%i in ('type "文件列表.txt"') do (
- set "NewName=%%i"
- set "NoBlank=!NewName: =!"
- if exist "!NoBlank!.jpg" (
- ren "!NoBlank!.jpg" "!NewName!.jpg"
- >> "重命名文件名成功的列表.txt" echo "!NoBlank!.jpg" "!NewName!.jpg"
- move /y "!NewName!.jpg" "D:\pic"
- )
- )
- for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
- set "file=%%~ni"
- if "!file: =!" equ "!file!" (
- if "!file:~12!" neq "" (
- del /f /q "%%i"
- >> "被删除文件的文件名列表.txt" echo "%%i"
- )
- )
- )
复制代码
作者: qixiaobin0715 时间: 2019-9-28 11:00
回复 17# Batcher
要的就是这种效果。多谢多谢!!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |