Windows 将具有特定(相同)名称的子文件夹复制到目标

Windows 将具有特定(相同)名称的子文件夹复制到目标,windows,batch-file,copy,cmd,Windows,Batch File,Copy,Cmd,把我的头绕在下面的问题上——也试着说明我试图实现的目标 源包含名为“导入”的子文件夹,其中包含文件和/或文件夹-(仅此“导入”-文件夹应以新的单独名称复制到目标目录,因为当然,只有一个文件夹具有相同的名称 .Source ├── FolderA │ └── import │ └── Attachment │ └── log │ ├── FolderB │ └── import │ └── log │ ├── FolderC │ └── import │

把我的头绕在下面的问题上——也试着说明我试图实现的目标

源包含名为“导入”的子文件夹,其中包含文件和/或文件夹-(仅此“导入”-文件夹应以新的单独名称复制到目标目录,因为当然,只有一个文件夹具有相同的名称

.Source
├── FolderA
│   └── import
│       └── Attachment
│   └── log
│
├── FolderB
│   └── import
│   └── log
│
├── FolderC
│   └── import
│       └── Attachment
│   └── log

我试图用FOR和xcopy或robocopy在CMD中解决这个问题,创建随机目标目录

for /f "delims=" %%A in ('dir /a:d /b /s "import"') do (xcopy /y /i /S "%%A" "C:\temp\%%~nxA%random%")
不幸的是,它不起作用,因为来自各种“导入”源文件夹的所有数据都复制到单个目标目录中,而不是单个目标目录中


非常感谢您的帮助

下面是Powershell中的一个简单代码,用于复制文件夹及其内容,并在目标文件夹中添加一个编号。 是不是像你要找的那样

下面的脚本是一个一次性交易,如果运行两次将失败(数字将从1开始)。 如果要多次运行,只需添加一个
If语句
,即可检查使用过的名称

$source = "SOURCE PATH"
$destination = "DESTINATION PATH"
$foldername = "FOLDERNAME"
$number = 0

$folders = Get-ChildItem -Path $source -Recurse | Where-Object {$_.Name -eq $foldername}
Foreach ($folder in $folders){
    $number++
    Copy-Item -Path $folder -Destination $destination -Recurse
    Rename-Item -Path "$destination\$foldername" -NewName "$foldername $Number"
}

下面是Powershell中的一个简单代码,用于复制文件夹及其内容,并在目标文件夹中添加一个编号。 是不是像你要找的那样

下面的脚本是一个一次性交易,如果运行两次将失败(数字将从1开始)。 如果要多次运行,只需添加一个
If语句
,即可检查使用过的名称

$source = "SOURCE PATH"
$destination = "DESTINATION PATH"
$foldername = "FOLDERNAME"
$number = 0

$folders = Get-ChildItem -Path $source -Recurse | Where-Object {$_.Name -eq $foldername}
Foreach ($folder in $folders){
    $number++
    Copy-Item -Path $folder -Destination $destination -Recurse
    Rename-Item -Path "$destination\$foldername" -NewName "$foldername $Number"
}

根据我的评论和您的回复,以下内容适用于您:

@For/D%%G In(“.Source\*”)Do@%\uuuuu AppDir\uuuu%robocy.exe“%%G\import”“。目的\%%~nxG\u import”>NUL
发件人:

For/D%G In(“.Source\*”)Do@%\uuuuu AppDir\uuuu%robocy.exe“%G\import”。Destination\%~nxG\u import”>NUL

根据我的评论和您的回复,以下内容适用于您:

@For/D%%G In(“.Source\*”)Do@%\uuuuu AppDir\uuuu%robocy.exe“%%G\import”“。目的\%%~nxG\u import”>NUL
发件人:

For/D%G In(“.Source\*”)Do@%\uuuuu AppDir\uuuu%robocy.exe“%G\import”。Destination\%~nxG\u import”>NUL
虽然用户的可能是最聪明的解决方案,但我想提供一个脚本,将唯一的随机数应用于目标目录中的子目录
import*

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u SOURCE=。\SOURCE”
设置“\u目标=。\Destination”
设置“_SUBDIR=import”
rem//重置数组变量:
对于/F“delims==”%%E in('2^>num^(set“$DIR[”^&set“$RND[“^”)do set“%%E=”
rem//生成源子目录的数组:
设置/A“CNT=0”
对于/D%%J in(“%\u SOURCE%\*”)do(
对于%%I in(“%%~J\%%\u SUBDIR%”)执行以下操作(
设置“ATTR=%%~aI”&设置“ITEM=%%~fI”
setlocal EnableDelayedExpansion
如果定义了属性如果“!ATTR:~,1!”==“d”(
对于/F“delims=“%%E in($DIR[!CNT!]=!ITEM!”)do(
endlocal&设置“%%E”
)
设置/A“CNT+=1”
)else endlocal
)
)
rem//构建唯一随机数数组:
设置/A“CNT-=1”
对于(0,1,%CNT%)中的/L%%R,请执行以下操作(
setlocal EnableDelayedExpansion
set/A“RND=(!RANDOM!虽然用户的可能是最聪明的解决方案,但我想提供一个脚本,将唯一的随机数应用于目标目录中的子目录
import*

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“\u SOURCE=。\SOURCE”
设置“\u目标=。\Destination”
设置“_SUBDIR=import”
rem//重置数组变量:
对于/F“delims==”%%E in('2^>num^(set“$DIR[”^&set“$RND[“^”)do set“%%E=”
rem//生成源子目录的数组:
设置/A“CNT=0”
对于/D%%J in(“%\u SOURCE%\*”)do(
对于%%I in(“%%~J\%%\u SUBDIR%”)执行以下操作(
设置“ATTR=%%~aI”&设置“ITEM=%%~fI”
setlocal EnableDelayedExpansion
如果定义了属性如果“!ATTR:~,1!”==“d”(
对于/F“delims=“%%E in($DIR[!CNT!]=!ITEM!”)do(
endlocal&设置“%%E”
)
设置/A“CNT+=1”
)else endlocal
)
)
rem//构建唯一随机数数组:
设置/A“CNT-=1”
对于(0,1,%CNT%)中的/L%%R,请执行以下操作(
setlocal EnableDelayedExpansion

设置/A“RND=(!RANDOM!你发布的代码不是命令行,而是命令行。请重新考虑这个问题,调整代码和/或标记以匹配,谢谢。另外,正如你已经说过的,你不希望有两个同名的目录,是什么让你认为
%RANDOM%
永远不会输出数字字符串匹配g一个已经存在的?将它们命名为
FolderA_import
FolderB_import
FolderC_import
等会更有意义。嗨!谢谢澄清,我更改了标签。复制的文件夹将在几分钟内从目标目录中处理和删除,所以我认为有可能发生相同的错误andom值非常小。但是,是的,我同意按照您描述的模式命名文件夹是有道理的。您代码片段的核心问题——除了可能重复的随机数之外——是缺少随机数……您发布的代码不是命令行,而是命令行。请修改问题是,调整代码和/或标记以匹配,谢谢。此外,正如您已经说过的,您不希望有两个同名目录,是什么让您认为
%RANDOM%
永远不会输出与现有目录匹配的数字字符串?将它们命名为
FolderA\u import
,会更有意义
FolderB_导入
FolderC_导入
等。您好!感谢您的澄清,我更改了标记。复制的文件夹将在几分钟内从目标目录进行处理和删除,因此我认为出现相同随机值的可能性很小