进一步阅读:

进一步阅读:

在 Windows 中是否有一种简单的方法可以批量交换两个文件的文件名?

我已经File_A.txtFile_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 


进一步阅读:

相关内容