ファイル名を3レベル上の同じフォルダー名に変更するバッチスクリプト(.bat)に取り組んできましたが、うまくいきませんでした。1レベル上の名前を変更することしかできません。複数のフォルダに複数のファイルがあります。
どんな助けでも大歓迎です。
ファイル名を3レベル上の同じフォルダー名に変更するバッチスクリプト(.bat)に取り組んできましたが、うまくいきませんでした。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"
現在のコードの意図を完全には理解していません。ただし、次の例では、3 レベル上のフォルダーに基づいて特定のファイルの名前を変更します。この戦略を使用して、フォルダーごとに特定の拡張子を持つ 1 つのファイルのみを名前変更できることに注意してください。
@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ファイルの名前を適切に変更すると思います。コードはテスト済みで、私の手で動作します。root
とのfiles
値を適切に設定するだけです。
@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"
)
)