2014-11-06 526 views
1

我有一个大的(aprox.150000)tif文件,它们都具有相同的文件名。他们是唯一的,因为他们所在的目录结构。将文件夹内的文件批量重命名为父文件夹名称

我想批量重命名tiff文件,使它们变得唯一,基于它们所在的目录structre。

有没有人有任何方法达到这个目标?

我正在使用Windows Server 2012,所以使用cmd脚本,批处理文件或windows GUI工具的解决方案将是完美的。

理想情况下,这是我想acheieve,但如果我必须有更多或所有的目录结构在最终文件名thsi仍然是非常非常有帮助。

C:\A_001\B_0001\ABC\0001.tif -> ABC.tif 

C:\A_001\B_0001\JKL\0001.tif -> JKL.tif 

C:\A_001\B_0001\XYZ\0001.tif -> XYZ.tif 

C:\A_001\B_0002\123\0001.tif -> 123.tif 

C:\A_001\B_0002\456\0001.tif -> 456.tif 

C:\A_001\B_0002\789\0001.tif -> 789.tif 
+0

可能重复([如何根据通过批处理脚本他的文件夹名称重命名文件] http://stackoverflow.com/questions/14055495/how-to-rename-a-file-according-his-文件夹名称通过批处理脚本) – Lanting 2014-11-06 09:50:24

+0

现在准备答案。同时你可以检查这个http://stackoverflow.com/a/25675706/388389 – npocmaka 2014-11-06 09:52:20

+0

冒号不应该在那里为测试案例2 ... – Monacraft 2014-11-06 10:01:35

回答

1

这应该工作:

pushd C:\A_001\B_0002 

for /d %%a in (*) do (
if exist "%%~a\0001.tif" ren "%%~a\0001.tif" "%%~a.tif" 
) 

popd 

哪些应该做你想要什么。我已经测试过这个,它在我的电脑上工作正常。

0

我在我的F盘上做了一个类似的foldertree。

从文件夹 “A_001”

FOR /F "TOKENS=3,4,5* DELIMS=\" %A IN ('DIR "%CD%\*.tif" /s /b /a:-d') DO MOVE "%CD%\%A\%B\%C" "%CD%\%A_%B%~xC" 

内启动commandprompt将导致:

MOVE "F:\A_001\B_0001\123\0001.tif" "F:\A_001\B_0001_123.tif" 
MOVE "F:\A_001\B_0001\ABC\0001.tif" "F:\A_001\B_0001_ABC.tif" 
MOVE "F:\A_001\B_0002\123\0001.tif" "F:\A_001\B_0002_123.tif" 
MOVE "F:\A_001\B_0002\ABC\0001.tif" "F:\A_001\B_0002_ABC.tif" 

所以你必须在文件夹 “A_001” 所有文件。

希望这会帮助吗?

0
@echo off 
for /f "delims=" %%F in ('dir /b /s /a-d "C:\A_001\0001.tif"') do (
    for %%D in ("%%~dpF.") do ren "%%F" "%%~nD%%~xF" || echo unable to rename "%%F" 
)