[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何根据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 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盘

TOP

回复 2# xp3000

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

没有复制文件,只复制了文件夹。

TOP

回复 3# tanrr

不好意思没测试就发了,已经改了

TOP

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

TOP

回复 4# xp3000

可以复制文件了,但是当路径是文件夹而不是文件时,没有复制文件夹中的文件,而是复制整个文件夹并打包为一个以文件夹名命名无扩展名的文件。

TOP

回复 4# xp3000

厉害,你这个代码基本能满足我的要求了,不用修改了,谢谢!后续如果有修改再请您帮忙。

TOP

回复 5# buyiyang

部分复制错误。我用楼上的代码可以的,谢谢了!

TOP

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

TOP

返回列表