批处理文件空白变量

时间:2014-07-09 04:02:48

标签: batch-file batch-rename

我试图根据文件夹的名称重命名文件夹的内容,并在最后添加一个字母。但是我很难根据我定义的字母数组得到这封信。到目前为止,这是我的代码。

@echo off

set letters[1]=a
set letters[2]=b
set letters[3]=c
set letters[4]=d
set letters[5]=e
set letters[6]=f
set letters[7]=g
set letters[8]=h
set letters[9]=i
set letters[10]=j
set letters[11]=k
set letters[12]=l
set letters[13]=m
set letters[14]=n
set letters[15]=o
set letters[16]=p
set letters[17]=q
set letters[18]=r
set letters[19]=s
set letters[20]=t
set letters[21]=u
set letters[22]=v
set letters[23]=w
set letters[24]=x
set letters[25]=y
set letters[26]=z

set /a index=0

pushd %1

for %%a in (%1) do set folder=%%~na

echo renaming %folder%...

setlocal enabledelayedexpansion
for %%i in (*.*) do (
    set /a index+=1
    set suffix=!letters[%index%]!
    echo appending -!suffix!...
    ren "%%~fi" "%folder%-!suffix!.*"
)
endlocal

popd

pause
exit /b

我已经读过使用EnableDelayedExpansion有助于在这种情况下使用(!)作为延迟变量?我还是很陌生,我不知道我在哪里弄错了,或者我怎么能为此创造一个解决方案。谢谢!

1 个答案:

答案 0 :(得分:1)

替换

set suffix=!letters[%index%]!

CALL set suffix=%%letters[!index!]%%

%index%指的是index在解析for %%i时的值,而不是通过循环操作的变化。

请注意,如果您的目标人数超过26个,您将会用完后缀!

(顺便说一下 - for %%a in (%1) do set folder=%%~na可能更好 - set folder=%%~n1