好的,这是设置:
我有大量的文本文件,格式如下:
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,但它没有像我预期的那样工作。
我是否想要一次做太多事情?谢谢你的帮助!
答案 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