windows - 使用批处理脚本在文本文件中使用文件夹列表将只需要的文件夹复制到目标文件夹
问题描述
我只想将特定文件夹及其中的文件从源位置复制到目标位置。文件夹列表在单独的文本文件中给出。
文本文件具有类似的值
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%]
)
)
)
解决方案
@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
您将需要更改设置sourcedir
以destdir
适应您的情况。该清单使用适合我的系统的设置。
我使用了一个名为q57193198.txt
包含一些虚拟数据的文件进行测试。
从文件中读取每一行,%%a
然后使用 adir /s/b
在%%e
. 将叶子%%~nxe
名称与文件中的名称匹配。在匹配时,将标志设置为空copied
,然后如果目标%%a
目录丢失,使用xcopy
创建它,复制文件,然后设置copied
为something。
如果第一次尝试失败(即%%a
目录存在),那么copied
将是未定义的,因此检测其中%%a[1..999]
第一个不存在的存在,xcopy
使用修改后的目标目录进行操作,并设置copied
标志。一旦copied
设置了标志,if not exist ..%%a[?]
就会关闭。
推荐阅读
- arrays - 您可以更改作为状态的多维数组的特定值吗?
- mongodb - 如何从文档中的列表中查询两个条件必须同时为真
- python - Python Beautifulsoup 无法获取 svg 标签
- python - 使用带有 SSL 的 sqlalchemy 和 pg8000 连接到数据库的正确方法是什么?
- javascript - 在python中执行Javascript的语法
- typescript - 扩展多个接口的更好方法
- java - 在 Junit 5 中使用 Mockito 静态模拟时如何抛出 InterruptedException?
- apache - 子域HTTP和HTTPS去不同的目录,Apache2.4
- python - 如何将matplotlib图形转换为二进制类型
- python-3.x - 如何修复“列表索引超出范围错误”