我有一个批处理文件,它将文件夹中的第一个文件重命名为其所在文件夹的名称,并将该文件移动到文件夹的父目录。
问题我面临的问题是,如果有多个文件,它们都会移出父目录。我只需要移动重命名的文件,而不需要移动其余文件。
这是我正在使用的代码:
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"
其他资源: