批处理文件重命名并将文件移动到父目录

批处理文件重命名并将文件移动到父目录

我有一个批处理文件,它将文件夹中的第一个文件重命名为其所在文件夹的名称,并将该文件移动到文件夹的父目录。

问题我面临的问题是,如果有多个文件,它们都会移出父目录。我只需要移动重命名的文件,而不需要移动其余文件。

这是我正在使用的代码:

FOR /D /R %%# in (*) DO (
    PUSHD "%%#"
    FOR %%@ in ("*.*") DO (
        Echo Ren: ".\%%~n#\%%@" "%%~n#%%~x@"
        Ren "%%@" "%%~n#%%~x@"
        move *.* .. 2>NUL
    )
    POPD
)
Pause&Exit

我不记得原始代码的来源,但我能够根据自己的需要对其进行调整,move *.* .. 2>NUL但我不明白是否可以进一步调整以满足我现在的需要。

答案1

@echo off 

cd /d "%~dp0"

for /d /r %%i in =;(*)do 2>nul =;(
     dir /on /b /a:-d "%%~dpnxi\*.*" | find /v "" | find /v "%~nx0" >nul && =;(
     call %:^) "%%~dpnxi" && popd
    );=
    );=

goto :eOf

%:^)
pushd "%~1" && for /f delims^= %%G in =;(
    'dir /on /b /a:-d ".\*.*" ^| find /v "%~nx0"'
    );= do 2>nul move "%%~fG" "..\%~nx1%%~xG" & exit /b

观察:无需先重命名然后移动,您可以在移动文件的同一命令中重命名:

move "D:\Path\SomeOriginalFileName.txt" "D:\OtherPath\withTheNewFileName.txt" 

其他资源:

相关内容