复制一个文件,在那里有100个文件和100个文件夹使用批处理文件
问题描述:
我有两个文件夹CopyFrom
和CopyTo
其中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
文件夹中的所有文件夹,但不能想出用两种工作得到我所期待的。
答
假设源位置包含的文件1.txt
只100.txt
和目标位置已经包含了所有F1
到F100
目录,下面的代码片段可能会为你工作:
@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
命令以实际复制文件!
答
@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
你还没有明确表态,如果目标文件夹被命名为相同的源文件,或者如果你只是想每个单独的源文件放置到指定目的地文件夹不同的是未知的。 – Compo
“CopyTo”位置中的所有文件夹“F1”,“F2”等是否已经存在?如果不是,他们是否必须创建? – aschipfl
@Compo,我们对此深感抱歉,'CopyTo'文件夹中有100个文件夹(例如F1,F2,... F100),并作为源文件被复制这些文件夹的名称是不一样的。当我说,**可以不同**,我的意思是,目标文件夹名称或源文件名称可以不同,如我在示例中提到的。 – Viki2016