Board logo

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

作者: tanrr    时间: 2023-6-1 19:53     标题: 批处理如何根据txt文本中的文件路径复制文件并保留目录结构?

各位大神,假如一个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\”目录除外,或者仅盘符除外)谢谢!
作者: xp3000    时间: 2023-6-1 20:32

本帖最后由 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盘
作者: tanrr    时间: 2023-6-1 22:25

回复 2# xp3000

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

没有复制文件,只复制了文件夹。
作者: xp3000    时间: 2023-6-1 23:21

回复 3# tanrr

不好意思没测试就发了,已经改了
作者: buyiyang    时间: 2023-6-2 09:37

  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
复制代码

作者: tanrr    时间: 2023-6-2 10:32

回复 4# xp3000

可以复制文件了,但是当路径是文件夹而不是文件时,没有复制文件夹中的文件,而是复制整个文件夹并打包为一个以文件夹名命名无扩展名的文件。
作者: tanrr    时间: 2023-6-2 10:43

回复 4# xp3000

厉害,你这个代码基本能满足我的要求了,不用修改了,谢谢!后续如果有修改再请您帮忙。
作者: tanrr    时间: 2023-6-2 10:43

回复 5# buyiyang

部分复制错误。我用楼上的代码可以的,谢谢了!
作者: qixiaobin0715    时间: 2023-6-2 11:04

本帖最后由 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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2