将文件名更改为文件夹名称

时间:2013-09-30 19:05:39

标签: file batch-file

我一直在处理批处理脚本(.bat),将文件名更改为相同的文件夹名称3级,但没有运气。我只能将它重命名为1级。多个文件夹中有多个文件。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我不完全理解您当前代码的意图。但以下将基于文件夹3级别重命名给定文件。请注意,您只能使用此策略重命名每个文件夹具有给定扩展名的文件。

@echo off
setlocal
set "file=H:\Techs\Exported Videos\Scenario\1-CAS IED\Media player format\A8 West\abc.avi"
for %%A in ("%file%") do for %%B in ("%%~A\..\..\..") do ren "%%~A" "%%~nxB%%~xA"

请注意,我包含文件夹名称的扩展名,因为文件夹名称可以包含点。

修改

根据OP的评论,我相信以下内容将正确重命名所有相关的.avi文件。代码已经过测试,并在我手中工作。只需根据需要设置rootfiles值。

@echo off
setlocal
set "root=H:\Techs\Exported Videos\Scenario"
set "files=*.avi"

for %%A in ("%root%\.") do set "root=%%~fA"
for /f "delims=" %%A in ('dir /b /s /a-d "%root%\%files%"') do (
  for %%B in ("%%~A\..\..\..") do (
    if /i "%%~dpB" equ "%root%\" ren "%%~A" "%%~nxB%%~xA"
  )
)

答案 1 :(得分:1)

你可以试试这个:

@echo off &setlocal
set /a PathLevel=3
for %%a in (
    "H:\Techs\Exported Videos\Scenario\1-CAS IED\Media player format\A8 West\1-CAS IED.avi"
    "H:\Techs\Exported Videos\Scenario\2-SAF\Media player format\A8 PTZ\2-SAF.avi"
    ) do (
    call:doit "%%~a"
)
goto:eof

:doit
set "fname=%~1"
set /a cnt=0
for %%a in ("%fname:\=","%") do set /a cnt+=1
set /a cnt-=PathLevel
for %%a in ("%fname:\=","%") do (
    set /a cnt-=1
    setlocal enabledelayedexpansion
    if !cnt! equ 0 (
        endlocal
        set "nname=%%~a"
    ) else endlocal
)
echo ren "%fname%" "%nname%%~x1"
goto:eof

输出是:

ren "H:\Techs\Exported Videos\Scenario\1-CAS IED\Media player format\A8 West\1-CAS IED.avi" "1-CAS IED.avi"
ren "H:\Techs\Exported Videos\Scenario\2-SAF\Media player format\A8 PTZ\2-SAF.avi" "2-SAF.avi"