
标题: [文件操作] 【已解决】怎样批量将每一个文件夹名从倒数第二个空格后面的所有字符都给去掉? [打印本页]
作者: crownking1983 时间: 4 天前 04:27 标题: 【已解决】怎样批量将每一个文件夹名从倒数第二个空格后面的所有字符都给去掉?
本帖最后由 crownking1983 于 2025-3-31 15:19 编辑
跪求一个批量修改文件名的批处理命令,批量将每一个文件夹名从倒数第二个空格后面的所有字符都给去掉,实例如下:
[XiuRen秀人网] 2024.12.23 VOL.9640 麻布学妹 性感红**趣服饰 [77+1P706M]
[XiuRen秀人网] 2024.12.23 VOL.9641 Zoe柚柚 性感黑色透视连体衣 [83+1P773M]
[XiuRen秀人网] 2024.12.23 VOL.9642 奶芙乔乔 圣诞主题 [65+1P779M]
[XiuRen秀人网] 2024.12.23 VOL.9643 梦心玥 性感白色连衣裙 [85+1P699M]
[XiuRen秀人网] 2024.12.23 VOL.9644 唐安琪 性感红色连衣短裙 [84+1P802M]
[XiuRen秀人网] 2024.12.24 VOL.9645 糖糖 性感黑色连衣裙 [67+1P739M]
[XiuRen秀人网] 2024.12.24 VOL.9646 方子萱 性感粉色短裙 [85+1P766M]
经过批处理后修改为
[XiuRen秀人网] 2024.12.23 VOL.9640 麻布学妹
[XiuRen秀人网] 2024.12.23 VOL.9641 Zoe柚柚
[XiuRen秀人网] 2024.12.23 VOL.9642 奶芙乔乔
[XiuRen秀人网] 2024.12.23 VOL.9643 梦心玥
[XiuRen秀人网] 2024.12.23 VOL.9644 唐安琪
[XiuRen秀人网] 2024.12.24 VOL.9645 糖糖
[XiuRen秀人网] 2024.12.24 VOL.9646 方子萱
也就是将倒数第二个空格后面的所有字符批量删除
作者: Five66 时间: 4 天前 10:01
保存为ansi或gbk或gb2312编码的bat- @set @l_l=1;/*&echo off
- for /f "eol=/ tokens=1* delims=/" %%a in ('dir /b /ad^|cscript //e:jscript //nologo "%~f0"') do (
- if "%%b" neq "%nil%" rename "%%a" "%%b"
- )
- echo,done&pause&exit /b 0 */
-
- Array.prototype.each=function(block){for(var i=0;i<this.length;i++)block(this[i]);return this;};
- WScript.StdIn.ReadAll().split(/\r?\n/).each(function(str){
- var aaa=str.match(/[^ ]+ +/g);
- if(aaa)aaa.pop();
- if(aaa&&aaa.length){WScript.Echo(str+'/'+aaa.join('').replace(/ +$/,''))}else{WScript.Echo(str);
- }});
复制代码
作者: aloha20200628 时间: 4 天前 12:46
本帖最后由 aloha20200628 于 2025-3-30 20:22 编辑
回复 1# crownking1983
以下代码存为 test.bat 运行结果会将所在目录下的子目录更名(格式如一楼要求》无论包含多少空格只删除子目录名倒数第二个空格后的全部字符)- @echo off &for /f "tokens=1-2 delims=/" %%a in (
- 'powershell "dir '.' -dir|%%{$a=$_.name.split(' ');$_.name+'/'+($a[0..($a.length-3)] -join ' ')}" '
- ) do ren "%%a" "%%b"
- pause&exit/b
复制代码
备注》虽然 powershell 亦可用 ren 更名目录,但低版本存在bug(直到 v5.1+ 方予更正)导致其规避代码比较繁琐,故仍取批处方法 ‘轻车简行’ 了...
作者: aloha20200628 时间: 4 天前 15:47
本帖最后由 aloha20200628 于 2025-3-30 20:15 编辑
回复 1# crownking1983
再给一个纯批版本如下,其运行结果会将所在目录下的子目录更名(格式如一楼要求》无论包含多少空格只删除子目录名倒数第二个空格后的全部字符)...- @echo off &for /f "delims=" %%a in ('dir /b/ad') do (set "a=%%a" &set "n=0" &call :xxx "%%a")
- pause&exit/b
- :xxx
- if %n% equ 2 (ren "%a%" "%b:~,-1%" &exit/b)
- set "b=%~1"
- if "%b:~-1%"==" " set/a "n+=1"
- call :xxx "%b:~,-1%"
- exit/b
复制代码
作者: idwma 时间: 4 天前 16:25
回复 3# aloha20200628
通符的问题不是bug吧
ren -literalpath
https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.management/rename-item?view=powershell-5.1#-literalpath
作者: aloha20200628 时间: 4 天前 19:16
本帖最后由 aloha20200628 于 2025-3-30 20:30 编辑
回复 5# idwma
用 powershell 低版如 v4 会导致下式报错退出,改用 powershell v5.1 则会正常运行...- dir -dir|%{ren $_.name ('a_'+$_.name)}
复制代码
作者: microsoft_yaw 时间: 4 天前 20:05
- @echo off
-
- for /f "delims=" %%a in ('dir /ad /b /s') do (
- for /f "tokens=1-4 delims= " %%b in ("%%~nxa") do (
- ren "%%a" "%%b %%c %%d %%e"
- )
- )
-
- pause
复制代码
作者: aloha20200628 时间: 4 天前 20:38
复查老帖》低版 powershell 须用 -LiteralPath 加持可以填坑(参见 6楼)...- dir -dir|%{ren -LiteralPath $_.name ('a_'+$_.name)}
复制代码
至此本帖若采用 powershell 一步到位(在cmd命令行运行)的更名方法(无论子目录名包含多少空格只删除其倒数第二个空格后的全部字符)可简化成如下代码,存为 test.bat 运行...- powershell "dir -dir|%{$a=$_.name.split(' '); ren -LiteralPath $_.name ($a[0..($a.length-3)] -join ' ')}"
复制代码
作者: semiuel 时间: 3 天前 12:40
我更关心的是楼主的身体,这么多妹子看得过来吗?
作者: crownking1983 时间: 3 天前 14:22
回复 9# semiuel
公知我心也!
作者: crownking1983 时间: 3 天前 15:21
本帖最后由 crownking1983 于 2025-3-31 15:23 编辑
回复 2# Five66
感谢大神!我能再引申一下么?
如何批量将每一个文件夹名从倒数第1个空格后面的所有字符全部去掉?
如何批量将每一个文件夹名从倒数第3个空格后面的所有字符全部去掉?
还有
如何批量将每一个文件夹名从正数第2个空格后面的所有字符全部去掉?
如何批量将每一个文件夹名从正数第1个空格后面的所有字符全部去掉?
如何批量将每一个文件夹名从正数第3个空格后面的所有字符全部去掉?
我想举一反三一下……
作者: aloha20200628 时间: 3 天前 16:11
本帖最后由 aloha20200628 于 2025-3-31 16:14 编辑
回复 11# crownking1983
若采用 powershell 简式(分别存为 test-1.bat 和 test-2.bat 运行),如下
一。删除倒数第n个空格后全部字符,可调整下式第一行中的 n 值(-1,-2,-3,...)- @echo off &set/a "n=-2, m=n-1"
- powershell "dir -dir|%{$a=$_.name.split(' '); ren -LiteralPath $_.name ($a[0..($a.length+%m%)] -join ' ')}"
- pause&exit/b
复制代码
二。删除正数第n个空格后全部字符,可调整下式第一行中的 n 值(1,2,3,...)- @echo off &set/a "n=2, m=n-1"
- powershell "dir -dir|%{$a=$_.name.split(' '); ren -LiteralPath $_.name ($a[0..%m%] -join ' ')}"
- pause&exit/b
复制代码
作者: crownking1983 时间: 前天 03:18
回复 12# aloha20200628
太牛逼了!国家富强全都靠你这样的人才
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |