在 Windows 中是否有一种简单的方法可以批量交换两个文件的文件名?
我已经File_A.txt
和File_B.txt
并且操作之后,File_A.txt
现在称为File_B.txt
,反之亦然。
:: Old Name New Name
File_A.txt --> File_B.txt
File_B.txt --> File_A.txt
这篇文章有一些解决方案,但我想批量执行,比如随机交换文件夹中的一堆文件名:
这个 Sctipt.Bat 也可以做到这一点,但我从来没能让它工作:
@echo off
setlocal EnableDelayedExpansion
cd %~dp0CopyOfFiles
:: generating a 'random number' that I wont use because this program is annoying
set m=%random%
set loop=0
:loop
set /a loop=%loop%+1
if "%loop%"=="1000" goto nexter
::calculating 2 random boi
set n=0
for %%f in (*.*) do (
set /A n+=1
set "file[!n!]=%%f"
)
::Generating an actual random number
set /A "rand1=(n*%random%)/32768+1"
set /A "rand2=(n*%random%)/32768+1"
if "%rand1%" == "%rand2%" goto next
echo %rand1%
echo %rand2%
::chose file from the first folder
move %~dp0CopyOfFiles\!file[%rand1%]! %~dp0CopyOfFiles\ThInGy
move %~dp0CopyOfFiles\!file[%rand2%]! %~dp0CopyOfFiles\!file[%rand1%]!
move %~dp0CopyOfFiles\ThInGy %~dp0CopyOfFiles\!file[%rand2%]!
:next
goto loop
:nexter
任何帮助都将不胜感激!这与其他类似问题不同,因为我不想手动重命名文件“file-a.txt”,也不想只使用文本文件,它可能是 .png 文件或 .brstms
答案1
@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0CopyOfFiles"
for %%i in (.\*.*
)do ren "%%~fi" "%%~ni_tmp%%~xi"
for %%i in (.\*_tmp.*)do if defined _old (
set "_new=%%~nxi" && ren "%%~dpi!_old!" "!_new:_tmp=!"
ren "%%~dpi!_new!" "!_old:_tmp=!" && set "_old=")else set "_old=%%~nxi"
endlocal
- 或者采用更传统的代码布局:
@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0CopyOfFiles"
for %%i in (*) do ren "%%~fi" "%%~ni_tmp%%~xi"
for %%i in (*_tmp.*) do if defined _old (
set "_new=%%~nxi"
ren "%%~dpi!_old!" "!_new:_tmp=!"
ren "%%~dpi!_new!" "!_old:_tmp=!"
set "_old="
) else (
set "_old=%%~nxi"
)
endlocal
可以对两个或更多个文件(总是成对)执行此操作,但请记住,您无法直接操作来更改文件之间的名称,请使用循环。
1.重命名所有文件一次以保留原始名称
:: Example ::
ren File_A.txt File_A_tmp.txt
2.再次重命名文件并使用保留的名称在目标文件中恢复原始名称
:: Example ::
ren File_A_tmp.txt File_B.txt