0

好的,设置如下:

我有大量具有以下格式的文本文件:

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,但它没有按预期工作。

我是否试图一次做太多事情?谢谢您的帮助!

4

1 回答 1

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

于 2013-11-08T18:26:21.347 回答