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

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

回复 5# idwma

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

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

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

返回列表