2016-10-04 109 views
0

我有两个文件夹CopyFromCopyTo其中CopyFrom具有命名为1.txt ... 100.txt 100个的文本文件,并在CopyTo文件夹我有100个拷贝一次一个文件夹文件夹为F1 ... F100。现在,我想将CopyFrom文件夹中的一个文件复制到CopyTo中的一个文件夹中,以便F1将包含1.txt,F2将包含2.txt,...,F100将包含100.txt文件。复制一个文件,在那里有100个文件和100个文件夹使用批处理文件

我知道复制我可以使用类似For /d %%a in (C:\Users\me\Desktop\ShortCuts\*) do xcopy "C:\Users\me\Desktop\Time.xls" "%%a"所有文件夹,但我无法找到一种方法,不同的文件复制到不同的文件夹。

我可以重复所有文件(For %%a in (C:\Users\me\Desktop\ShortCuts\*) Echo "%%a")CopyFrom文件夹中,也可以回声CopyTo文件夹中的所有文件夹,但不能想出用两种工作得到我所期待的。

+0

你还没有明确表态,如果目标文件夹被命名为相同的源文件,或者如果你只是想每个单独的源文件放置到指定目的地文件夹不同的是未知的。 – Compo

+0

“CopyTo”位置中的所有文件夹“F1”,“F2”等是否已经存在?如果不是,他们是否必须创建? – aschipfl

+0

@Compo,我们对此深感抱歉,'CopyTo'文件夹中有100个文件夹(例如F1,F2,... F100),并作为源文件被复制这些文件夹的名称是不一样的。当我说,**可以不同**,我的意思是,目标文件夹名称或源文件名称可以不同,如我在示例中提到的。 – Viki2016

回答

0

假设源位置包含的文件1.txt100.txt和目标位置已经包含了所有F1F100目录,下面的代码片段可能会为你工作:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem // Define constants here: 
set "Pattern=*.txt" 
set "CopyFrom=." 
set "CopyTo=D:\Target" 

for %%F in ("%CopyFrom%\%Pattern%") do (
    ECHO copy "%%~F" "%CopyTo%\F%%~nF\" 
) 

endlocal 
exit /B 

有没有枚举完成的目标位置,复制目标只是从源文件名派生而来。

在测试脚本后,删除大写ECHO命令以实际复制文件!

+0

这将是巨大的,如果你能解释一下这个请'复制“%%〜F”“%CopyTo用于%\˚F%%〜nF的\”' – Viki2016

+0

这会将每个源文件('%%〜F')复制到以'%CopyTo%'为根,并命名为'F'的文件夹,后跟当前文件的基本名称(如果文件为'27.txt', '%%〜nF'等于'27';输入'for /?'进入命令提示符窗口并查看帮助文本的底部);最后的反斜杠确保目标它是一个文件夹,但不是一个文件... – aschipfl

+0

感谢您的详细解释.. – Viki2016

2
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    rem Configure paths 
    set "copyFrom=c:\somewhere" 
    set "copyTo=c:\anotherPlace" 

    rem Generate two lists, one with files and one with folders 
    dir /b /a-d "%copyFrom%\*" > "%temp%\copyFromFiles.txt" 
    dir /b /ad "%copyTo%\*" > "%temp%\copyToFolders.txt" 

    rem Assign each list as input to two streams and start processing  
    9< "%temp%\copyFromFiles.txt" 8< "%temp%\copyToFolders.txt" (
     call :matchFromWithTo 
    ) 

    rem Remove generated lists 
    del "%temp%\copyFromFiles.txt" 
    del "%temp%\copyToFolders.txt" 

    rem End 
    goto :eof 

:matchFromWithTo 
    rem Read file from stream 9 and leave if nothing read 
    <&9 set /p "file=" || goto :eof 
    rem Read folder from stream 8 and leave if nothing read 
    <&8 set /p "folder=" || goto :eof 

    rem Do the copy (debug: we will only echo the command) 
    echo copy "%copyFrom%\%file%" "%copyTo%\%folder%" 

    rem Keep reading until all files or folders are processed 
    goto :matchFromWithTo 
+0

好主意是F100'!为了获得排序的输出(也在非NTFS卷上),在'dir'命令行中添加'/ on'怎么办? – aschipfl

+0

@aschipfl,谢谢。 *“......可以不同......”*使我放弃了该选项。没有文件/文件夹名称之间的明确关系,我决定只是在文件系统默认顺序中迭代。 –

+0

感谢您的回答,我必须说你一个真的是一个详细.. – Viki2016

相关问题