在Windows中编写批处理文件以逐年重命名文件夹

时间:2014-06-26 04:44:40

标签: windows batch-file rename directory

我有123个文件夹。我想从1895年到2013年将它们重命名。我试过:

for /D in (J:\Cinema\Years\*) do rename "%%k" to "%%~nx(D+1894)"

但我认为D不是整数变量。所以我做了些蠢事。

2 个答案:

答案 0 :(得分:2)

你必须创建一个变量并递增它。

此代码在本地进行测试:

SETLOCAL EnableExtensions EnableDelayedExpansion

SET count=1985
FOR /D %%k IN (J:\Cinema\Years\*) DO (
    rename "%%k" "!count!"
    set /a "count+=1"
)

答案 1 :(得分:1)

@echo off
    setlocal enableextensions enabledelayedexpansion

    set "folder=J:\Cinema\Years"

    set "counter=1895"
    for /d %%a in ("%folder%\*") do (
        echo ren "%%~fa" "!counter!"
        set /a "counter+=1"
    )

在您的代码中,您缺少for循环中的变量/可替换参数(此示例代码中的%%a)。此可替换参数将保留对正在迭代的元素的引用,在这种情况下为文件夹(/d开关请求文件夹)。对于它们中的每一个,执行重命名命令以将文件夹重命名为计数器,该计数器在每个循环上递增。

当执行批处理文件时,解析,执行每行代码或代码块(括在括号中的代码),然后对下一行/块重复该过程。在分析时,在开始执行之前,行/块中的所有变量读取都将替换为变量内的值。因此,如果在块内部和同一块内部更改变量,则需要访问更改的值,需要延迟扩展,指示解析器需要延迟值替换,直到执行该行。

这是counter变量所必需的。它的值在块内变化(do的{​​{1}}子句),因此,我们需要for以及从enabledelayedexpansion%counter%的语法更改,指示解析器将在执行时检索此变量值,而不是解析时间。

在示例代码中,!counter!命令将回显到控制台。如果输出正确,请删除ren以执行重命名操作。

代码不检查错误。如果存在任何生成的文件夹名称,则该文件夹的重命名操作将失败。