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

[文件操作] 【已解决】怎样批量将每一个文件夹名从倒数第二个空格后面的所有字符都给去掉?

[复制链接]
发表于 2025-3-30 04:27:25 | 显示全部楼层 |阅读模式
本帖最后由 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 方子萱

也就是将倒数第二个空格后面的所有字符批量删除
发表于 2025-3-30 10:01:06 | 显示全部楼层
保存为ansi或gbk或gb2312编码的bat

  1. @set @l_l=1;/*&echo off
  2. for /f "eol=/ tokens=1* delims=/" %%a in ('dir /b /ad^|cscript //e:jscript //nologo "%~f0"') do (
  3. if "%%b" neq "%nil%" rename "%%a" "%%b"
  4. )
  5. echo,done&pause&exit /b 0 */

  6. Array.prototype.each=function(block){for(var i=0;i<this.length;i++)block(this[i]);return this;};
  7. WScript.StdIn.ReadAll().split(/\r?\n/).each(function(str){
  8. var aaa=str.match(/[^ ]+ +/g);
  9. if(aaa)aaa.pop();
  10. if(aaa&&aaa.length){WScript.Echo(str+'/'+aaa.join('').replace(/ +$/,''))}else{WScript.Echo(str);
  11. }});
复制代码

评分

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

查看全部评分

发表于 2025-3-30 12:46:19 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-30 20:22 编辑

回复 1# crownking1983

以下代码存为 test.bat 运行结果会将所在目录下的子目录更名(格式如一楼要求》无论包含多少空格只删除子目录名倒数第二个空格后的全部字符)

  1. @echo off &for /f "tokens=1-2 delims=/" %%a in (
  2.   'powershell "dir '.' -dir|%%{$a=$_.name.split(' ');$_.name+'/'+($a[0..($a.length-3)] -join ' ')}" '
  3. ) do ren "%%a" "%%b"
  4. pause&exit/b
复制代码
备注》虽然 powershell 亦可用 ren 更名目录,但低版本存在bug(直到 v5.1+ 方予更正)导致其规避代码比较繁琐,故仍取批处方法 ‘轻车简行’ 了...

评分

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

查看全部评分

发表于 2025-3-30 15:47:11 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-30 20:15 编辑

回复 1# crownking1983

再给一个纯批版本如下,其运行结果会将所在目录下的子目录更名(格式如一楼要求》无论包含多少空格只删除子目录名倒数第二个空格后的全部字符)...

  1. @echo off &for /f "delims=" %%a in ('dir /b/ad') do (set "a=%%a" &set "n=0" &call :xxx "%%a")
  2. pause&exit/b
  3. :xxx
  4.    if %n% equ 2 (ren "%a%" "%b:~,-1%" &exit/b)
  5.    set "b=%~1"
  6.    if "%b:~-1%"==" " set/a "n+=1"
  7.    call :xxx "%b:~,-1%"
  8.    exit/b
复制代码

评分

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

查看全部评分

发表于 2025-3-30 16:25:37 | 显示全部楼层
回复 3# aloha20200628

通符的问题不是bug吧
ren -literalpath
https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.management/rename-item?view=powershell-5.1#-literalpath
发表于 2025-3-30 19:16:08 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-30 20:30 编辑

回复 5# idwma

用 powershell 低版如 v4 会导致下式报错退出,改用 powershell v5.1 则会正常运行...

  1. dir -dir|%{ren $_.name ('a_'+$_.name)}
复制代码
发表于 2025-3-30 20:05:24 | 显示全部楼层
  1. @echo off

  2. for /f "delims=" %%a in ('dir /ad /b /s') do (
  3.         for /f "tokens=1-4 delims= " %%b in ("%%~nxa") do (
  4.                 ren "%%a" "%%b %%c %%d %%e"
  5.         )
  6. )

  7. pause
复制代码
发表于 2025-3-30 20:38:22 | 显示全部楼层

复查老帖》低版 powershell 须用 -LiteralPath 加持可以填坑(参见 6楼)...

  1. dir -dir|%{ren -LiteralPath $_.name ('a_'+$_.name)}
复制代码
至此本帖若采用 powershell 一步到位(在cmd命令行运行)的更名方法(无论子目录名包含多少空格只删除其倒数第二个空格后的全部字符)可简化成如下代码,存为 test.bat 运行...

  1. powershell "dir -dir|%{$a=$_.name.split(' '); ren -LiteralPath $_.name ($a[0..($a.length-3)] -join ' ')}"
复制代码
发表于 2025-3-31 12:40:13 | 显示全部楼层
我更关心的是楼主的身体,这么多妹子看得过来吗?
 楼主| 发表于 2025-3-31 14:22:31 | 显示全部楼层
回复 9# semiuel


    公知我心也!
 楼主| 发表于 2025-3-31 15:21:31 | 显示全部楼层
本帖最后由 crownking1983 于 2025-3-31 15:23 编辑

回复 2# Five66


    感谢大神!我能再引申一下么?
    如何批量将每一个文件夹名从倒数第1个空格后面的所有字符全部去掉?
    如何批量将每一个文件夹名从倒数第3个空格后面的所有字符全部去掉?

    还有

    如何批量将每一个文件夹名从正数第2个空格后面的所有字符全部去掉?
    如何批量将每一个文件夹名从正数第1个空格后面的所有字符全部去掉?
    如何批量将每一个文件夹名从正数第3个空格后面的所有字符全部去掉?

    我想举一反三一下……
发表于 2025-3-31 16:11:16 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-3-31 16:14 编辑

回复 11# crownking1983

若采用 powershell 简式(分别存为 test-1.bat 和 test-2.bat 运行),如下

一。删除倒数第n个空格后全部字符,可调整下式第一行中的 n 值(-1,-2,-3,...)

  1. @echo off &set/a "n=-2, m=n-1"
  2. powershell "dir -dir|%{$a=$_.name.split(' '); ren -LiteralPath $_.name ($a[0..($a.length+%m%)] -join ' ')}"
  3. pause&exit/b
复制代码
二。删除正数第n个空格后全部字符,可调整下式第一行中的 n 值(1,2,3,...)

  1. @echo off &set/a "n=2, m=n-1"
  2. powershell "dir -dir|%{$a=$_.name.split(' '); ren -LiteralPath $_.name ($a[0..%m%] -join ' ')}"
  3. pause&exit/b
复制代码
 楼主| 发表于 2025-4-1 03:18:49 | 显示全部楼层
回复 12# aloha20200628


    太牛逼了!国家富强全都靠你这样的人才
发表于 2025-4-4 19:04:58 | 显示全部楼层
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /ad "* * *"') do (
  3.     set "fd=%%i"
  4.     setlocal enabledelayedexpansion
  5.     for /f "delims=" %%j in ("x:\!fd: =\!\..\..") do (
  6.         endlocal
  7.         set "fd=%%~pnxj"
  8.     )
  9.     setlocal enabledelayedexpansion
  10.     for /f "tokens=*" %%j in ("!fd:\= !") do (
  11.         endlocal
  12.         ren "%%i" "%%~j"
  13.     )
  14. )
  15. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

发表于 2025-4-4 19:45:06 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1*delims=|" %%i in ('dir /b /ad "* * *" ^| sed -r "s/^(.+)(\s\S+){2}$/&|\1/"') do (
  3.     echo ren "%%i" "%%j"
  4. )
  5. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:24 , Processed in 0.037233 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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