无法在令牌中获取最后2个字符,并且for循环返回vaiable中的第一个令牌

时间:2013-11-08 17:26:29

标签: batch-file for-loop token rename

好的,这是设置:

我有大量的文本文件,格式如下:

filename## time Description of file with spaces

我正在尝试使用for循环重命名磁盘上的实际文件和文件的描述:

FOR /F "tokens=1,2,*" %%a IN (%1) DO call :rename %%a %%b "%%c"
goto :eof
:rename
set origfilename=%1
set last2=%1:~-2%
set time=%2
set "multiword=%~3"

ren %origfilename%.ext "%last2%_%time%_%multiword%.ext"

set origfilename=
set last2=
set time=
set multiword=

以下是发生的事情:

last2永远不会拾取原始文件名的最后2个字符,如果我在DO之后回显%3而不是调用:rename,则它具有带空格的完整标记。当我尝试在循环中使用%3时,它只包含%3的第一个标记。 我尝试在for之前使用setlocal EnableDelayedExpansion,但它没有像我预期的那样工作。

我是否想要一次做太多事情?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

试试这个。我想这会做你想要的。

@echo off 
for /f "Tokens=1,2,3*" %%a in ('dir /b filename*') do (
   call :rename "%%a %%b %%c %%d" %%a %%b "%%c %%d")
goto :eof
:rename full orig time new
echo %2
set last2=%2
set last2=%last2:~-2%
echo ren "%~1.ext" "%last2%_%3_%~4.ext"

如果一切正常,请删除Echo