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

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

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

也就是将倒数第二个空格后面的所有字符批量删除

保存为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

评分人数

TOP

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

评分人数

TOP

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

评分人数

TOP

回复 3# aloha20200628

通符的问题不是bug吧
ren -literalpath
https://learn.microsoft.com/zh-cn/powershell/module/microsoft.powershell.management/rename-item?view=powershell-5.1#-literalpath

TOP

本帖最后由 aloha20200628 于 2025-3-30 20:30 编辑

回复 5# idwma

用 powershell 低版如 v4 会导致下式报错退出,改用 powershell v5.1 则会正常运行...
  1. dir -dir|%{ren $_.name ('a_'+$_.name)}
复制代码

TOP

  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
复制代码

TOP


复查老帖》低版 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 ' ')}"
复制代码

TOP

我更关心的是楼主的身体,这么多妹子看得过来吗?

TOP

回复 9# semiuel


    公知我心也!

TOP

本帖最后由 crownking1983 于 2025-3-31 15:23 编辑

回复 2# Five66


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

    还有

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

    我想举一反三一下……

TOP

本帖最后由 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
复制代码

TOP

回复 12# aloha20200628


    太牛逼了!国家富强全都靠你这样的人才

TOP

返回列表