簡體   English   中英

如何將文件批量重命名為父級的父文件夾名稱

[英]How to rename a file to the parent's parent folder name in batch

所以我有一堆文件夾,其目錄與以下類似:

.\page\1\randomStringofCharacters\randomStringofCharactersAgain.png
.\page\2\randomStringofCharacters\randomStringofCharactersAgain.png
.\page\3\randomStringofCharacters\randomStringofCharactersAgain.png

我想將所有.png文件重命名為第一個randomStringofCharacters之前的數字。 所以基本上

.\page\1\randomStringofCharacters\randomStringofCharactersAgain.png -> 1.png
.\page\2\randomStringofCharacters\randomStringofCharactersAgain.png -> 2.png
.\page\3\randomStringofCharacters\randomStringofCharactersAgain.png -> 3.png

有沒有可以做到這一點的批處理腳本? 我努力了:

@Echo OFF

FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
    FOR %%@ in ("*.png") DO (
        Echo Ren: ".\%%~n#\%%@" "%%~n#%%~x@"
        Ren "%%@" "%%~n#%%~x@"
    )
    POPD
)

Pause&Exit

然而,這只用父目錄重命名文件。

如果可能的話,有沒有辦法將所有這些重命名的 .png 文件移動到.\page\ (與.bat 所在的位置相同)中新創建的文件夾中,其文件夾名稱為 page?

提前致謝!

可能是這樣的(您必須將主文件夾拖放到批處理中):

@echo off

if exist "%~1" (IF not exist "%~1\" exit) else (exit)
if /i not exist "%~dp0Page" md "%~dp0Page"

pushd "%~1"
for /f "delims=" %%a in ('dir /s /b *.png') do Call :Rename "%%~a" "%%~dpa"
exit

:Rename
set Cpath=%~2
set Cpath=%Cpath:~0,-1%
For %%a in ("%Cpath%") do set Cpath=%%~dpa
set Cpath=%Cpath:~0,-1%
for %%a in ("%Cpath%") do set NName=%%~nxa
move "%~1" "%~dp0Page\%NName%%~x1"
goto :EOF

在此處輸入圖像描述

您不應該使用for /R來處理預定義目錄層次結構深度中的項目:

@echo off
rem // Iterate through the numeric target sub-directories (`1`, `2`, `3`, etc.):
for /D %%K in (".\page\*") do (
    rem // Iterate through sub-sub-directories `randomStringofCharacters`:
    for /D %%J in ("%%~K\*") do (
        rem // Iterate through `.png` files:
        for %%I in ("%%~J\*.png") do (
            rem // Actually rename the current file:
            ren "%%~I" "%%~nxK%%~xI"
        )
    )
)

請注意,此方法不會檢查每個位置是否只有一個.png文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM