【问题标题】:Write a batch file in Windows to rename folders yearwise在 Windows 中编写批处理文件以每年重命名文件夹
【发布时间】:2014-06-26 04:44:40
【问题描述】:

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

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

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

【问题讨论】:

  • 您需要提供更多信息。最关键的是目录的命名结构(几个明确的示例)。下一个小问题是 1895+123-1=2017,而不是 2013。下一个问题可能通过提供目录名称来避免 - 但如果目标驱动器是 FAT,现有名称可能会按偶然情况排序,并且无法保证会保留.

标签: windows batch-file rename directory


【解决方案1】:

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

此代码在本地测试:

SETLOCAL EnableExtensions EnableDelayedExpansion

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

【讨论】:

    【解决方案2】:
    @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 变量所必需的。它的值在块内发生变化(fordo 子句),因此,我们需要enabledelayedexpansion 以及从%counter%!counter! 的语法变化,表明解析器将检索此变量值在执行时,而不是解析时。

    在示例代码中,ren 命令回显到控制台。如果输出正确,去掉echo,执行重命名操作。

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

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-08-10
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      相关资源
      最近更新 更多