【问题标题】:Copy only needed folders to destination folder using folderlist in Textfile using batch script使用批处理脚本在文本文件中使用文件夹列表仅将需要的文件夹复制到目标文件夹
【发布时间】:2019-07-25 01:48:30
【问题描述】:

我只想将特定文件夹及其中的文件从源位置复制到目标位置。文件夹列表单独给出 文本文件。

文本文件的值类似于

01
02
03

例如源文件夹的父文件夹和子文件夹

a --> 

   01 --> Hi.txt
b --> 
   c -- > 
        d --> 
              02  --> foo.txt, abc.xlsx
e --> 
     02 --> foo.txt
f -->
     03 --> cde.txt
g -->
     04 --> xyz.txt

目标文件夹所需的输出

01 --> Hi.txt
02 --> foo.txt, abc.xlsx
02[2] --> foo.txt
03 --> cde.txt

我当前的代码无法在目标文件夹中创建带有后缀 [2] 的重复文件夹,而是要求 [覆盖目标文件夹中已经存在的文件]:

例如上面示例中的文件夹 02 在两个不同的子文件夹中出现两次。使用下面的代码,它只在目标中创建一个 02 文件夹,从其中的第一个 02 源文件夹中复制文件,并在下一次出现时,它只是说目标中已经存在文件夹你想覆盖名称与文件相似的文件已经在目标 02 文件夹中。

有人可以帮我解决这个问题并帮我创建带有后缀 [2] 、 [3] .. 等的重复文件夹,以应对任何重复文件夹名称的出现。

代码:

 @echo off

    set SRC_FOLDER="C:\Source\"
    set DST_FOLDER="C:\Destination"

    for /f "tokens=*" %%a in 
 (C:\Users\Desktop\CopyScript\TextFile.txt) 
    do (
    for /d /r %SRC_FOLDER% %%G in (*) do (
        set /x counter=0
        REM echo %%~nxG and %%G and %%a
        if "%%~nxG"=="%%a" (

            :loop
            if exist %DST_FOLDER%\%%a[%x%] set /x 
      counter=!counter!+1 && goto :loop
                mkdir %DST_FOLDER%\%%a[%x%]
                xcopy "%%G" %DST_FOLDER%\%%a[%x%]
            )       
     )
     )

【问题讨论】:

  • 你贴的代码有几个错误的换行符,没有set /X;那么它真的是您使用的代码吗?请从您的脚本中复制它,不要在这里重新输入!

标签: windows shell batch-file command-line


【解决方案1】:
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q57193198.txt"
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
 FOR /f "delims=" %%e IN ('dir /s /b /ad "%sourcedir%\*"') DO IF /i "%%~nxe"=="%%a" (
  SET "copied="
  IF NOT EXIST "%destdir%\%%a" XCOPY "%%e\*" "%destdir%\%%a\"&SET "copied=y"
  IF NOT DEFINED copied FOR /L %%s IN (1,1,999) DO IF NOT DEFINED copied IF NOT EXIST "%destdir%\%%a[%%s]" XCOPY "%%e\*" "%destdir%\%%a[%%s]\"&SET "copied=y"
 )
)
GOTO :EOF

您需要更改sourcedirdestdir 的设置以适应您的情况。该列表使用适合我的系统的设置。

我使用了一个名为 q57193198.txt 的文件,其中包含一些用于我的测试的虚拟数据。

从文件中读取每一行到%%a,然后使用dir /s/b%%e 中创建目录列表。将%%~nxe 中的叶子名称与文件中的名称相匹配。在匹配时,将标志 copied 设置为 nothing,然后如果目标 %%a 目录丢失,使用 xcopy 创建它,复制文件,然后将 copied 设置为 一些东西

如果第一次尝试失败(即存在%%a 目录),则copied 将未定义,因此检测%%a[1..999] 的存在 存在,使用修改后的目标目录执行xcopy,并设置copied 标志。一旦设置了copied 标志,if not exist ..%%a[?] 就会被关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多