我有123个文件夹。我想从1895年到2013年将它们重命名。我试过:
for /D in (J:\Cinema\Years\*) do rename "%%k" to "%%~nx(D+1894)"
但我认为D
不是整数变量。所以我做了些蠢事。
答案 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
以执行重命名操作。
代码不检查错误。如果存在任何生成的文件夹名称,则该文件夹的重命名操作将失败。