使用批处理程序复制带有文件的文件夹(Windows)

时间:2017-08-08 15:44:41

标签: windows batch-file for-loop copy

我在练习中受阻......我们有下一个结构:

1)公司/公司A / 1.KYC / data17-07-05.xls
2)公司/公司B / 1.KYC / data17 / 08 / 04.xls
3)公司/公司C / 1.KYC / data17 / 08 / 08.xls& docXLS.xls
4)等。

我只想复制1号和2号文件夹而不是3号文件夹...(所以只有我们有1个文件的文件夹而不是2个文件夹。)

我不知道如何开始......

我有下一个代码,但我迷路了:

@echo off
setlocal disabledelayedexpansion

set "folder=%~1"
if not defined folder set "folder=C:\Users\Albert\Desktop\backup2\company01\"

for /d %%a in ("%folder%\*") do (
    set "size=0"
    for /f "tokens=3,5" %%b in ('dir /-c /a /w /s "%%~fa\*" 2^>nul ^| findstr /b /c:"  "') do if "%%~c"=="" set "size=%%~b"
    setlocal enabledelayedexpansion

    if !size! GTR 0 xcopy "C:\Users\Albert\Desktop\backup2\company01\"%%~nxa "C:\Users\Albert\Desktop\backup2\"%%~nxa /e /i

    echo(%%~nxa # !size!
    endlocal
)

pause

我是批次语言的初学者,所以如果有可能帮助我的话......非常感谢!

1 个答案:

答案 0 :(得分:0)

以下假设,根据您指定的数据,.xls文件将始终位于名为1.KYC的子目录中:

@Echo Off
SetLocal DisableDelayedExpansion

Set "folder=%~1"
If Not Defined folder Set "folder=%UserProfile%\Desktop\backup2\company01"

If Not Exist "%folder%\" Exit/B
For /F "Delims=|" %%A In ('Dir/B/S/AD-S-L "%folder%\1.KYC"') Do (Set "_="
    For /F "Skip=6Tokens=3" %%B In ('RoboCopy/L /NFL /NDL /NJH "%%A" Null *.xls'
    ) Do If "%%B"=="1" If Not Defined _ (Set "_=T"
        XCopy "%%A" "%UserProfile%\Desktop\backup2\%%~nxA" /E /I))

但它有一个已知问题:

RoboCopy命令将匹配以.xls开头的任何文件扩展名,这意味着您希望它与目录只包含一个.xls文件,但其中还有一个.xlsx文件,它将无法正常运行。