如何批量传输重命名?

How to batch transfer rename?

有两个文件夹,它们之间的文件数量相等。 我想应用一组中的名称;没有特定顺序的另一组文件。继承名称,但保留扩展名 .

输入文件为.bmp 输出文件为.ini(有齿轮符号)。

示例:

 folder 1-  Flowers.bmp  ; folder 2- blank.ini
. To this:
 folder 1-  Flowers.bmp  ; folder 2- Flowers.ini

会有更多文件,但数量相等。 .ini 文件都是副本。所以他们可能有一个通用名称和编号,如果这很重要的话。这些都会从另一个文件夹中的其他 .bmp 文件中获得一个名称。

通常我的桌面上都有这两个文件夹。 我确保两个文件夹之间的文件数量相等。那将是一个常数。

我正在尝试简化一些琐碎的重复性日常任务。 我进行了搜索,但我发现的内容并没有真正帮助。

@ECHO OFF
SET "vers=%~1"
IF "%vers%" == "" SET /P "vers=Enter Vers: "
FOR %%F IN (file_XX_*.*) DO CALL :process "%%F"
GOTO :EOF

:process
SET "name=%~nx1"
SETLOCAL ENABLEDELAYEDEXPANSION
SET "name=!name:_XX_=_%vers%_!"
RENAME %1 "%name%"
ENDLOCAL

希望最终能找到解决办法。

这不是最有效的方法,但考虑到您有限的批处理经验,我想一种可理解的方法比优化的方法(使用类似数组的变量)更好。

@echo off
setlocal enabledelayedexpansion

(for %%A in ("folder 1\*.bmp") do echo %%~nA)> "%temp%\names.txt"

<"%temp%\names.txt" (
for %%A in ("folder 2\*.ini") do (
  set /p "name="
  ECHO ren "%%A" "!name!.ini"
))

第一个 for 循环创建所需名称的列表(来自 Folder 1)。修饰符 %%~nA returns 仅 n

第二个 for 处理 Folder 2 中的每个文件,并从先前生成的文件中为每个文件取一个名称。 这取决于两个文件夹中的文件数量是否相同,否则您可能会得到不想要的结果。

我通过回显禁用了实际的 ren 命令。检查输出,只有当您满意时,才删除 ECHO.

好的,这是一个稍微长一点的版本,但它确保它获取每个文件夹的内容。

注意您必须确保在第三行和第四行中正确指定两个文件夹的路径:

@echo off
setlocal enabledelayedexpansion
set "source=%userprofile%\Desktop\folder 1"
set "destination=%userprofile%\Desktop\folder 2"
set /a num=0
for %%a in ("%source%\*") do (
  set /a num+=1
  set "fr!num!m=%%~na"
)
set /a oldn=!num!
set /a num=0
for %%b in ("%destination%\*") do (
  set /a num+=1
  set "to!num!r!=%%~nxb"
  set "ext=%%~xb"
)
pushd "%destination%"
for /l %%i in (1,1,!oldn!) do ren "!to%%ir!" "!fr%%im!%ext%"
popd
pause

如果您对输出感到满意,您可以删除脚本底部的 pause