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

[文件操作] 批处理如何根据txt文本中的文件路径复制文件并保留目录结构?

[复制链接]
发表于 2023-6-1 19:53:30 | 显示全部楼层 |阅读模式
各位大神,假如一个TXT文件包括一下文件路径
C:\1\s\u\Fdfgfer.aaa
C:\1\s\somecfil.sss
C:\1\s\somecfse.sss
C:\1\s\somerccfse.sds
C:\1\s\lkfig\oofauhdgjin\oofauhdgjin.uf
C:\1\s\lkfig\oofauhdgjin\ds.dsd
C:\1\s\lkfig\oofauhdgjin\df.jff
C:\1\s\gfg.sss
C:\1\s\lkfig\lkfig.dsd
C:\1\s\somemon.sss
C:\1\s\lkfig
C:\1\s\lkfig\Fish.dsd

批处理如何根据TXT文件中的路径复制文件到一个新文件夹,同时创建文件夹,保留与源相同的文件目录结构。(“C:\1\s\”目录除外,或者仅盘符除外)谢谢!
发表于 2023-6-1 20:32:42 | 显示全部楼层
本帖最后由 xp3000 于 2023-6-1 23:20 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('dir /b 文件.txt') do (
  4. for /f %%a in (%%i) do (
  5. set "f=%%a"&set "s=!f:%%~nxa=!"
  6.     if not defined !s! (
  7.         set !s!=1
  8.         MD "d!s:~1!" 2>nul
  9.         )
  10.     copy "!f!" "d!s:~1!%%~nxa"
  11.     )
  12. )
  13. pause & exit/b
复制代码
D盘
 楼主| 发表于 2023-6-1 22:25:35 | 显示全部楼层
回复 2# xp3000

文件名、目录名或卷标语法不正确。
已复制         0 个文件。

没有复制文件,只复制了文件夹。
发表于 2023-6-1 23:21:39 | 显示全部楼层
回复 3# tanrr

不好意思没测试就发了,已经改了
发表于 2023-6-2 09:37:27 | 显示全部楼层
  1. set "listf=1.txt"
  2. set "so=C:\1\s"
  3. set "de=C:\1\d"
  4. setlocal enabledelayedexpansion
  5. set "so=%so%"&set "de=%de%"
  6. set "so=%so:\\=\%"&set "de=%de:\\=\%"
  7. for /f "delims=" %%i in ('type %listf%') do (
  8. if /i "%%i" gtr "%so%" (
  9.     set "de=%%i"
  10.     set "de=!de:%so%=%de%!"
  11.     for %%a in ("!de!") do xcopy "%%i" "%%~dpa"
  12.     )
  13. )
  14. pause
复制代码
 楼主| 发表于 2023-6-2 10:32:48 | 显示全部楼层
回复 4# xp3000

可以复制文件了,但是当路径是文件夹而不是文件时,没有复制文件夹中的文件,而是复制整个文件夹并打包为一个以文件夹名命名无扩展名的文件。
 楼主| 发表于 2023-6-2 10:43:02 | 显示全部楼层
回复 4# xp3000

厉害,你这个代码基本能满足我的要求了,不用修改了,谢谢!后续如果有修改再请您帮忙。
 楼主| 发表于 2023-6-2 10:43:59 | 显示全部楼层
回复 5# buyiyang

部分复制错误。我用楼上的代码可以的,谢谢了!
发表于 2023-6-2 11:04:20 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-6-2 14:59 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "SourcePath=C:\1\s"
  4. set "DestPath=D:\abc"
  5. for /f "delims=" %%i in (1.txt) do (
  6.     if not "%%~xi"=="" (
  7.         set "str=%%~dpi"
  8.         set "str=!str:%SourcePath%=%DestPath%!"
  9.         if not exist "!str!" md "!str!"
  10.         copy "%%i" "!str!"
  11.     )
  12. )
  13. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 14:41 , Processed in 0.019205 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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