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

时间:2020-06-04 10:31:19

标签: windows batch-file copy

全神贯注于以下问题-还试图说明我要实现的目标。

源包含名为“ import”的子文件夹,其中包含文件和/或文件夹-(仅)此“ import”文件夹应复制到具有新个人名称的目标目录中,因为只能有一个同名文件夹当然。

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

.Destination
├── import27526
│   └── Attachment
│
├── import96385
│
├── import52987
│   └── Attachment

我尝试使用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%")

不幸的是,它不起作用,因为来自各种“导入”源文件夹中的所有数据都被复制到单个目标目录中,而不是单个目录中。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

根据我的评论和您的回复,以下应该对您有用:

// ButtonTypes.d.ts
export interface Button {
  color: "red" | "blue";
}

来自

@For /D %%G In (".Source\*") Do @%__AppDir__%Robocopy.exe "%%G\import" ".Destination\%%~nxG_import">NUL

答案 1 :(得分:0)

下面在Powershell中有一个简单的代码,该代码复制包含其内容的文件夹,并在目标位置的文件夹中添加一个数字。 是您想要的东西吗?

下面的脚本是一个一次性交易,如果您运行两次,它将失败(该数字将从1开始)。 如果您想多次运行If-statement,只需简单地广告$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" } 即可检查使用的名称。

<a href="/redirect-coaching">Coaching</a> 


router.get('/redirect-coaching', (req, res) =>
{
   res.redirect('/coaching')
})

答案 2 :(得分:0)

尽管用户Compoapproach可能是最聪明的解决方案,但我想提供一个脚本,该脚本将唯一的随机数应用于目标目录中的子目录import*:< / p>

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "_SOURCE=.\Source"
set "_TARGET=.\Destination"
set "_SUBDIR=import"

rem // Reset array variables:
for /F "delims==" %%E in ('2^> nul ^(set "$DIR[" ^& set "$RND["^)') do set "%%E="

rem // Build array of source sub-directories:
set /A "CNT=0"
for /D %%J in ("%_SOURCE%\*") do (
    for %%I in ("%%~J\%_SUBDIR%") do (
        set "ATTR=%%~aI" & set "ITEM=%%~fI"
        setlocal EnableDelayedExpansion
        if defined ATTR if "!ATTR:~,1!"=="d" (
            for /F "delims=" %%E in ("$DIR[!CNT!]=!ITEM!") do (
                endlocal & set "%%E"
            )
            set /A "CNT+=1"
        ) else endlocal
    )
)

rem // Build array of unique random numbers:
set /A "CNT-=1"
for /L %%R in (0,1,%CNT%) do (
    setlocal EnableDelayedExpansion
    set /A "RND=(!RANDOM!<<16)+(!RANDOM!<<2)+!RANDOM!%%2"
    for /F "delims=" %%E in ("$RND[!RND!_%%R]=%%R") do (
        endlocal & set "%%E"
    )
)

rem // Copy source sub-direcgtories to destination using random names:
setlocal EnableDelayedExpansion
set /A "CNT=0"
for /F "tokens=2 delims==" %%R in ('2^> nul set "$RND["') do (
    > nul xcopy /Y /E /I "!$DIR[%%R]!" "!_TARGET!\!_SUBDIR!!CNT!"
    set /A "CNT+=1"
    )
endlocal

endlocal
exit /B

如果您对序号感到满意,那么就文件系统返回匹配子目录的顺序(通常在NTFS等现代系统文件中按字母顺序)而言,您可以改用以下脚本:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "_SOURCE=.\Source"
set "_TARGET=.\Destination"
set "_SUBDIR=import"

rem // Build array of source sub-directories:
set /A "CNT=0"
for /D %%J in ("%_SOURCE%\*") do (
    for %%I in ("%%~J\%_SUBDIR%") do (
        set "ATTR=%%~aI" & set "ITEM=%%~fI"
        setlocal EnableDelayedExpansion
        if defined ATTR if "!ATTR:~,1!"=="d" (
            > nul xcopy /Y /E /I "!ITEM!" "!_TARGET!\!_SUBDIR!!CNT!"
            endlocal & set /A "CNT+=1"
        ) else endlocal
    )
)

endlocal
exit /B