【问题标题】:How do I condense this into a good for loop?如何将其压缩为一个好的 for 循环?
【发布时间】:2015-03-29 19:49:46
【问题描述】:

基本上,你如何把它变成一个高效的 for 循环?我需要在文件夹的文件名中插入一个空格,最好是子文件夹;在它之后的任何数字和任何字母之间,而不是在它之前,只留下文件名中的所有其他内容,包括可见的文件扩展名。数字并不总是在同一个令牌上。这将从 A-Z 开始。

:trim-r
@echo off
setlocal enabledelayedexpansion
CD %workdir%
PUSHD "%workdir%"
for /r %workdir% %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:0a=0 a!
set filename=!filename:1a=1 a!
set filename=!filename:2a=2 a!
set filename=!filename:3a=3 a!
set filename=!filename:4a=4 a!
set filename=!filename:5a=5 a!
set filename=!filename:6a=6 a!
set filename=!filename:7a=7 a!
set filename=!filename:8a=8 a!
set filename=!filename:9a=9 a!
set filename=!filename:0b=0 b!
set filename=!filename:1b=1 b!
set filename=!filename:2b=2 b!
set filename=!filename:3b=3 b!
set filename=!filename:4b=4 b!
set filename=!filename:5b=5 b!
set filename=!filename:6b=6 b!
set filename=!filename:7b=7 b!
set filename=!filename:8b=8 b!
set filename=!filename:9b=9 b!
set filename=!filename:0c=0 c!
set filename=!filename:1c=1 c!
set filename=!filename:2c=2 c!
set filename=!filename:3c=3 c!
set filename=!filename:4c=4 c!
set filename=!filename:5c=5 c!
set filename=!filename:6c=6 c!
set filename=!filename:7c=7 c!
set filename=!filename:8c=8 c!
set filename=!filename:9c=9 c!
if not "!filename!"=="%%~nj" ren "%%j" "!filename!%%~xj"
)
endlocal
popd
EXIT /B

【问题讨论】:

  • 在没有路径的情况下完成pushd "%workdir%". You can simply use /r`之后就不需要使用/r %workdir%了。
  • 请注意,谢谢 dbenham

标签: batch-file for-loop rename


【解决方案1】:

您的代码与您的描述不符(为什么“h”更改为“a”,“w”更改为“c”?)并且您没有发布任何示例。无论如何,下面的代码将任何<digit><letter> 更改为<digit><space><letter>

for /R %workdir% %%j in (*.*) do (
   set "filename=%%~nj"
   for /L %%n in (0,1,9) do (
      for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
         set "filename=!filename:%%n%%a=%%n %%a!"
      )
   )
   if "!filename!" neq "%%~nj" ren "%%j" "!filename!%%~xj"
)

【讨论】:

  • 这是一个很好的纯批处理解决方案。我看到的唯一潜在问题是,如果它在数字之前,它会将大写字母转换为小写字母。此外,如果名称中包含! 字符,它将失败。
  • 太棒了,谢谢。你说得对,我会很快修复这个例子。为了简单起见,我把它改成了 abc,忘了改其他的。
  • 我之前试图将代码放在一起,看起来我已经很接近了。 :D
【解决方案2】:

我的jrepl.bat regular expression renaming utility 使这项任务变得非常简单和高效。它是纯脚本(混合 JScript/批处理),可以在 XP 以后的任何 Windows 机器上本地运行。

假设 JREPL.BAT 在您的当前目录中,或者更好的是,在您的 PATH 中的某个位置:

call jren "([a-zA-Z])([0-9])" "$1 $2" /s /p "%workdir%"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-11
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多