找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 4421|回复: 9

[文件操作] 【已解决】批处理能否把文件夹批量复制多个文件夹并改名?

[复制链接]
发表于 2025-7-3 20:55:57 | 显示全部楼层 |阅读模式
本帖最后由 228630386 于 2025-7-4 18:36 编辑

正常情况下是一对一文件夹改名的,但也有遇到以下情况,一个文件夹里有图片的,需要复制多个文件夹并改名(有时候需要复制2个或者3个或者多个),请问这种情况批处理能否实现?
BA2342059PS-001023 复制多个并改为:
8902512448834
8902512448872

BA2212138PS-001-F01套装 复制多个并改为:
8902512476486
8902512476509

BA2312121PS-001F84 复制多个并改为:
856605813500
896605813425
896605813463
发表于 2025-7-4 09:49:13 | 显示全部楼层
回复 1# 228630386

是 ‘一对一更名’ 与 ‘一对n复制更名’ 两种处理实况都有吗?若是,这二者如何区别?楼主须用示例一次性完整、明确说明需求...
 楼主| 发表于 2025-7-4 10:43:35 | 显示全部楼层
回复 2# aloha20200628


文件夹名称有对应的两列excel表格。

以下是一对一改名的,平时是用 ren "BA2232036PS-001E6F" "196152099075"这样操作。
BA2232036PS-001E6F 196152099075
BA2232039PS-002Y3E 196155412819

以下是左边会有重复,需要复制改成右边的文件夹名。
BA2342059PS-001023  8902512448834
BA2342059PS-001023 8902512448872
BA2212138PS-001-F01套装 8902512476486
BA2212138PS-001-F01套装 8902512476509
BA2312121PS-001F84 856605813500
BA2312121PS-001F84 896605813425
BA2312121PS-001F84 896605813463
发表于 2025-7-4 11:17:06 | 显示全部楼层
回复 3# 228630386

旧名与新名有规律性的对应关系吗?如果没有就无所谓批处理 '以一当十' 的优势了 ...
发表于 2025-7-4 15:02:53 | 显示全部楼层
  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & pause & exit /b

  3. s = "d:\1.xlsx"
  4. p = "."

  5. Set oWshShell = CreateObject("WScript.Shell")
  6. Set oFSO = CreateObject("Scripting.FileSystemObject")
  7. p = oFSO.GetAbsolutePathName(p)
  8. oWshShell.CurrentDirectory = p

  9. Set oWorkbook = GetObject(s)
  10. Set oWorksheet = oWorkBook.Sheets(1)
  11. n = 1
  12. Do
  13.     x = oWorksheet.Cells(n, 1)
  14.     y = oWorksheet.Cells(n, 2)
  15.     If (x = "") Or (y = "") Then Exit Do
  16.     oFSO.CopyFolder x, y, False
  17.     n = n + 1
  18. Loop
复制代码
其中 p 是要重命名的文件所在的路径
p = "." 表示当前路径。可以指定其它路径,比如 d:\test\
 楼主| 发表于 2025-7-4 15:24:58 | 显示全部楼层
回复 5# czjt1234


    你好,非常感谢,可以复制并重命名,如果想将文件放在新的目录可以实现吗?因为如果在当前目录的话,文件多就容易混淆。
发表于 2025-7-4 15:34:56 | 显示全部楼层
  1. rem 另存为 ANSI 编码 bat
  2. ' & cls & cscript.exe /nologo /e:vbscript "%~f0" %* & pause & exit /b

  3. s = "d:\1.xlsx"
  4. p = "."
  5. t = "D:\new"

  6. Set oWshShell = CreateObject("WScript.Shell")
  7. Set oFSO = CreateObject("Scripting.FileSystemObject")
  8. p = oFSO.GetAbsolutePathName(p)
  9. oWshShell.CurrentDirectory = p

  10. Set oWorkbook = GetObject(s)
  11. Set oWorksheet = oWorkBook.Sheets(1)
  12. n = 1
  13. Do
  14.     x = oWorksheet.Cells(n, 1)
  15.     y = oWorksheet.Cells(n, 2)
  16.     If (x = "") Or (y = "") Then Exit Do
  17.     oFSO.CopyFolder x, oFSO.BuildPath(t, y), False
  18.     n = n + 1
  19. Loop
复制代码
t 是要复制到的新文件夹
发表于 2025-7-4 17:13:22 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-7-4 18:34 编辑

回复 3# 228630386

假设保存 ‘1对N’ 复制更名对应关系的两列表格文件位于 c:\xls\1.xls,用以下代码存为 test.bat,须放在被处理目录的上一级目录中运行,代码先调用 powershell 把 c:\xls\1.xls 转换为临时文件 1.csv,再从中逐行读取每行目录完成在当前目录下的复制更名...

  1. @echo off &powershell "$x=new-object -comobject excel.application; $wb=$x.workbooks.open('c:\xls\1.xls'); $x.visible=$false; $x.displayalerts=$false;$wb.saveas('%temp%\1.csv',6); $wb.close(); $x.quit()"
  2. for /f "usebackq tokens=1-2 delims=," %%a in ("%temp%\1.csv") do xcopy /siyq "%%a" "%%b"
  3. del /q "%temp%\1.csv" &pause&exit/b
复制代码
 楼主| 发表于 2025-7-4 18:33:59 | 显示全部楼层
本帖最后由 228630386 于 2025-7-4 18:35 编辑

回复 8# aloha20200628


    结果跟五楼的一样,太厉害了。我是放在同一目录中运行也没问题喔。
 楼主| 发表于 2025-7-4 18:36:28 | 显示全部楼层
回复 7# czjt1234


    完美解决了,这样少下不少时间了,真的非常感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:39 , Processed in 0.019839 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表