首页 > 解决方案 > 通过子文件夹顺序重命名文件 - .bat

问题描述

我正在尝试进行一些重命名,但递归地,下面是我所在的位置,我有点卡住了。我在我认为我错的地方添加了一条评论。

@echo off

setlocal enableextensions enabledelayedexpansion

set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please choose a folder.',0,0).self.path""
for /f "usebackq delims=" %%i in (`powershell %psCommand%`) do set "rootfolder=%%i"

@echo on

cd %rootfolder%

for /r "%rootfolder%\" %%a in (*) do (
    set "folder=%%~dpa"
    cd %%~dpa
    for %%i in ("!folder!") do (
            set parent=%%~ni
        )

:: for %%i in ("!folder!") do (set parent=%%~ni) 
:: that part returns me parent= 
:: i would like it to be for example if folder is d:\test\test1 
:: parent = test1

    set /a count=10000
    for /F "eol=| delims=" %%f in ('dir /B /A:-D-H-S /O:N "*.tif"') do (
        set /a count+=1
        set fileName=!parent!_!count:~-4!%%~xf
        rename "%%f" "!fileName!"
    )
)
exit /b

标签: windowsbatch-filecmd

解决方案



你好,


发布我的问题的答案,我设法找到了解决方案,您可以在下面看到它,但我敢肯定,现在像您这样知道自己在做什么的人眼睛都在流血。

因此,如果您想帮助我使该脚本看起来更好,非常欢迎您。

@echo off

setlocal enableextensions enabledelayedexpansion

set "psCommand="(new-object -COM 'Shell.Application')^
.BrowseForFolder(0,'Please choose a folder.',0,0).self.path""
for /f "usebackq delims=" %%i in (`powershell %psCommand%`) do set "rootfolder=%%i"

cd %rootfolder%

for /r "%rootfolder%" %%a in (*) do ( 
        set Fdir=%%~dpa 
        call :001 "%%~a"
)
    
:001
    cd %Fdir%
    set Fder=%cd%
    for %%i in (%Fder%) do (
        call :002 "%Fder%"
    )
    
:002
@echo on
set var1=%cd%
set var2=%var1%
set i=0

:003
for /F "tokens=1* delims=:+\+" %%A in ( "%var1%" ) do (
    set /A i+=1
    set var1=%%B
    goto 003
)
for /F "tokens=%i% delims=:+\+" %%G in ( "%var2%" ) do set last=%%G
goto 004

:004
    set parent=!last!
    set /a count=10000
    for /F "eol=| delims=" %%f in ('dir /B /A:-D-H-S /O:N "*.tif"') do (
        set /a count+=1
        set fileName=!parent!_!count:~-4!%%~xf
        rename "%%f" "!fileName!"
    )
exit /b

推荐阅读