batch-file - 如何检查是否存在带有通配符的目录是否存在并将该文件夹复制到另一个位置?
问题描述
我正在尝试编写一个 bat 脚本以更好地组织我客户的文件。我创建了两个文件夹。第一个名为“文件夹”,其中包含每个客户端及其文件的文件夹。每个客户端的文件夹名称都具有结构 name_surname_uniqueclientid。第二个名为“Raw”,包含原始客户端文件和文件夹,但每个文件夹或文件在其名称中都包含唯一的客户端 ID。我的目标是从每个“文件夹”文件夹中提取每个 ID,并检查“原始”文件夹中是否有包含此 ID 的文件或文件夹。如果有,应该将它们复制到相应的“文件夹”中
我的问题是我无法检查包含 id 的文件夹并将它们移动到相应的“文件夹”文件夹。
我已经设法从文件夹的名称中提取 id,检查包含此 id 的“Raw”文件夹中的文件并将它们复制到相应的“folders”文件夹中。据我所知,脚本没有输入最后一个 if。它应该找到包含 id 的文件夹,如果有的话,将它们复制到相应的“文件夹”文件夹中。
@echo off
setlocal enabledelayedexpansion
for /d %%a in ("folders\*") do (
for /f "tokens=3 delims=_" %%t in ("%%~nxa") do (
if exist "Raw\*%%t*" (
xcopy "Raw\*%%t*" "%%a"
)
下面这部分不起作用:
if exist Raw\*%%t*\ (
xcopy "Raw\*%%t*\*" "%%a" /s /i
echo ok
)
)
)
pause
goto :eof
初始文件夹树
C:\DATA
├───folders
│ ├───FirstName_Lastname_10123
│ │ |
│ │ │ kjhda10123.rtf
│ │ │ dadsada10123lhlhfds.txt
│ │ │
│ │ └───kjhfdsfs10123f
│ ├───FirstName_Lastname_10124
│ │ │ jgkjgjfs10124kjlda.rtf
│ │ │ klhlidkas10124klhdas.txt
│ │ │
│ │ └───lkhjlkhdsakda10124
│ └───FirstName_Lastname_10125
│ │ kjhkdsa10125.rtf
│ │ 10125dakjh.txt
│ │
│ └───10125
| | kjhkjda.txt
| | hkda.pdf
└───Raw
| dsakhkhda10123.txt
| kgjddjasg10125.pdf
| kkkkdajh10123khda.docx
| 10124dsadas
|
└───vcb10125
后
C:\DATA
├───folders
│ ├───FirstName_Lastname_10123
│ │ | kkkkdajh10123khda.docx
│ │ │ kjhda10123.rtf
│ │ │ dadsada10123lhlhfds.txt
| | | dsakhkhda10123.txt
│ │ │
│ │ └───kjhfdsfs10123f
│ ├───FirstName_Lastname_10124
│ │ │ jgkjgjfs10124kjlda.rtf
│ │ │ klhlidkas10124klhdas.txt
│ │ │ 10124dsadas
│ │ └───lkhjlkhdsakda10124
│ └───FirstName_Lastname_10125
│ │ kjhkdsa10125.rtf
│ │ 10125dakjh.txt
│ │ kgjddjasg10125.pdf
| | vcb10125
│ └───10125
| | kjhkjda.txt
| | hkda.pdf
└───Raw
|
|
|
|
|
└───
如果文件夹已存在合并
解决方案
IMO 您的方法并没有那么糟糕,
但是if
您需要另一个for
方法来迭代/解析在 RAW 中找到的文件/文件夹。
我还要move
文件,而不是复制:
:: Q:\Test\2019\01\10\SO_54120642.cmd
@echo off
Set "Base=C:\Data\folders"
Set "Src=C:\Data\Raw"
for /d %%A in ("%Base%\*") do (
for /f "tokens=3 delims=_" %%T in ("%%~nxA") do (
for /f "delims=" %%F in ('dir /B /A "%Src%\*%%T*" 2^>Nul') Do (
Move "%Src%\%%F" "%%A\"
)
)
)
pause
goto :eof
在我的 ramdrive 上模拟了你的树,结果如下:
> tree /F
└───DATA
├───folders
│ ├───FirstName_Lastname_10123
│ │ │ dadsada10123lhlhfds.txt
│ │ │ dsakhkhda10123.txt
│ │ │ kjhda10123.rtf
│ │ │ kkkkdajh10123khda.docx
│ │ │
│ │ └───kjhfdsfs10123f
│ ├───FirstName_Lastname_10124
│ │ │ 10124dsadas
│ │ │ jgkjgjfs10124kjlda.rtf
│ │ │ klhlidkas10124klhdas.txt
│ │ │
│ │ └───lkhjlkhdsakda10124
│ └───FirstName_Lastname_10125
│ │ 10125dakjh.txt
│ │ hkda.pdf
│ │ kgjddjasg10125.pdf
│ │ kjhkdsa10125.rtf
│ │ kjhkjda.txt
│ │
│ ├───10125
│ └───vcb10125
└───Raw
推荐阅读
- android - 图例被 MPAndroidChart 中的饼图截断?
- java - 带有 --enable-preview 的源版本 14 无效(仅版本 15 支持预览语言功能)。\mvnw -DskipTests clean package
- dropdown - 如何使用 java 在 selenium 中处理搜索和选择下拉菜单
- kubernetes - 哪些 Kubernetes 名称可以以数字开头?
- python - 矩阵比较
- html - 关键帧中的 CSS 变量
- reactjs - 在本机反应中移动到下一个屏幕
- python - 查找正则表达式匹配 x 的数量,将数据帧的某些列重复 x 次 + Unicode 错误
- javascript - 无法读取数据数组。获取:未捕获的错误:未知类型的列标题:1
- amazon-web-services - 调用 ListBuckets 操作时发生错误(InvalidAccessKeyId)