Board logo

标题: [文件操作] BAT批处理命令,如何赋予每一行文本内容作为变量,并且在for循环中分别执行? [打印本页]

作者: ziymin    时间: 2018-8-28 11:23     标题: BAT批处理命令,如何赋予每一行文本内容作为变量,并且在for循环中分别执行?

本帖最后由 ziymin 于 2018-8-28 11:41 编辑

求助:我需要在下面这些文件夹里面,分别拷贝另一个文件夹"test"的文件到里面去,如何实现?

目录结构如下:
--------------------------------------------------------------
C盘下,假设有"abc"夹,在里面可能有1到n个文件夹(具体文件名未知,只知道前半部分是“aa bb cc”):
C:\abc\aa bb cc a1\
C:\abc\aa bb cc a1.2\
C:\abc\aa bb cc a1.4\
C:\abc\aa bb cc a1.某某\
C:\abc\aa bb cc b2.5\
C:\abc\aa bb cc b2.某某\
......
C:\abc\还有其他文件夹,不用处理

文件名后半部分是未知的,可能如上述,也可能更长,甚至还有空格,没发现固定规律

我的思路是:
1.先获取文件夹的数量"n",变量名n
c:
cd "\abc"
dir /b "aa bb cc*" >c:\xx.txt
for /f %%i in ('type c:\xx.txt ^|find /c /v ""') do (set /a n=%%i)

2.获取文本xx.txt的内容,并赋予每一行文本内容作为路径变量“dir”
for /f "delims=" %%i in (c:\xx.txt) do set dir=%%i

3.根据n的数量来决定做几次拷贝循环
cd /d "%~dp0" 回到当前目录
for /l %%a in (1,1,%n%) do xcopy /e/h/k/o/y "test" "C:\abc\%dir%\test\"

问题来了,
思路是这样应该没错,但是一路执行下来肯定是不行的,
思路2的变量赋予,系统只是取了最后一次(最后一个文件夹名)作为"dir"变量的内容,
思路3的拷贝循环,变成执行n次拷贝"test"文件夹内容到最后一个文件夹去了,
并不是我要的分别拷贝到每一个文件夹里面。

所以,路径变量"dir"如何赋予才能关联到拷贝循环,实现分别拷贝文件的要求?
作者: Batcher    时间: 2018-8-28 11:32

  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /ad "C:\abc\aa bb cc *"') do (
  3.     xcopy /e/h/k/o/y "test" "C:\abc\%%i\test\"
  4. )
复制代码

作者: ziymin    时间: 2018-8-28 11:42

回复 2# Batcher

高手就是不一样,搞定!
作者: ai20110304    时间: 2018-8-29 15:26

回复 2# Batcher


    向高手靠齐,每天抽一些时间学习,练习




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