2014-01-22 17 views
2

我在创建一个批处理文件(.bat)根据特定的参数重命名同一目录中的多个文件的问题。为了让它发生多个文件,我不得不为它增加一个增量值。批处理文件重命名多个文件只回声结果

从研究(主要是在这里)我拼凑在一起的下面的命令,但无论我做了什么,我实际上无法做到这一点。它只是回应了应该做什么,当我从“ren”之前删除回声时,它说的是错误的语法。

@echo off 
CD C:\FolderPath\ 
setlocal enabledelayedexpansion 
set /a count=0 
for /f "tokens=*" %%a in ('dir /b /od *.txt') do (
echo ren CDFF_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2%_!count!.txt 
set /a count+=1 
) 
+0

@Tomalak - 仔细阅读这个问题,OP说如果ECHO被移除,它会导致语法错误 – dbenham

+0

@dbenham哦,你是对的。删除评论。 – Tomalak

回答

2

添加的第一个参数REN命令(重命名文件):

ren "%%a" "CDFF_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2%_!count!.txt" 

所以整个代码:

@echo off 
setlocal enabledelayedexpansion 

CD C:\FolderPath\ 
set /a count=0 

for /f "tokens=*" %%a in ('dir /b /od *.txt') do (
    echo ren "%%a" "CDFF_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2%_!count!.txt" 
    set /a count+=1 
) 

请注意,它不会对文件一起工作奇怪的名字。例如。 “文件(name.txt”

+0

+1,但为什么它不适用于有毒字符?引号应该防止有毒字符。 – dbenham

+0

我试过这个,我得到了一个“系统找不到指定的路径”,所以我删除了'CD'命令只是为了测试* .bat文件所在文件夹中的文件,我仍然只是回应它它应该这样做。 – EkeshOkor

+0

好的。从头开始。有用。 为了简单起见,我只是复制了代码,但是我没有意识到即使我在'ren'之后添加了参数,但我未能在它之前删除回显。 谢谢 – EkeshOkor

0

ren需要输入FILNAME作为第一个参数。因此您的语法错误

这里是一个另类的实现:。

@echo off 
setlocal enabledelayedexpansion 

set FOLDER=%1 
set DATE=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%%time:~3,2%%time:~6,2%%time:~9,2% 
set /a count=0 

for /r %FOLDER% %%a in (*.txt) do (
    ren "%%a" CDFF_%DATE%_!count!.txt 
    set /a count += 1 
) 

呼叫作为

rename.bat C:\FolderPath 
+0

谢谢。我可能会错,但我读这个.bat文件需要用目标路径调用。 在我的情况下,目标路径永远不会改变,并且.bat文件不能位于目标路径中,因此为什么我试图像我那样写它。 (可能应该在最初的描述中加入) – EkeshOkor

+0

这是一个已经由'for/r'循环处理的特例。如果你省略了参数,那么'%1'将是空的,这意味着'FOLDER'将是空的,此时'for/r'假定当前目录。 – Tomalak