2015-04-08 46 views
1

我想知道我的代码有什么问题,因为它不起作用在Windows中批量重命名多个文件?

我想重命名Chris中的所有png文件。

但未能

for /f in ('C:/Users/Chris/Downloads/images/*.png') 
do ren "C:\Users\Chris\Downloads\images\*.png" "%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%-img.png" 

回答

2

在参数无需/ F,不需要引号,但你缺少一个变量声明

变量应在DO-部分,否则可用于为不是真的有用

的对,所以你需要使用剥离文件名会枚举的完整路径〜n的

该做的部分必须是直接的背后for语句或它必须是圆括号内

这里的完整代码:

for %%i in (C:/Users/Chris/Downloads/images/*.png) do (
    ren "%%i" "%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%-%%~niimg.png" 
) 
2

如果为了使用for循环,你需要指定一个变量来使用(即使你不这样做根本在循环中使用一个变量),否则你会得到一个语法错误。虽然变量只能是一个字母,但这几乎是批处理中变量区分大小写的唯一时间,所以你有52个字母,加上我见过的一些额外的字符,比如#。此外,do必须始终)位于同一行。

A for /F loop可以处理字符串,文本文件和其他批处理命令。

  • 要处理字符串,用双引号:for /F %%A in ("hello world") do echo %%A
  • 要处理批处理命令,使用单引号:for /F %%A in ('dir /b') do echo %%A
  • 处理文本文件,不要使用在所有的任何报价:for /F %%A in (C:\Users\Chris\image_list.txt) do echo %%A

您可能还想进入您正在处理的目录,以便简化操作。

pushd C:\Users\Chris\Downloads\images 
for /F %%A in ('dir /b *.png') do (
    REM I'm not sure what the %HR% variable is supposed to be, so I'm ignoring it. 
    ren "%%A" "%date:~10,4%-%date:~4,2%-%date:~7,2%_%HR%%time:~3,2%-img.png" 
)