我想创建一个正在执行以下操作的批处理文件,从我的所有计算机中搜索所有类型的文件,但是从搜索中排除某些目录,例如Windows或Program Files,并且只复制文件在一个文件夹中,而不是父/父目录/目录。
我试过三种方式:
首先使用ROBOCOPY命令
ROBOCOPY C:\ %location% *.jpg *.png /S /XD "Windows" "Program Files" /XJ /W:0 / R:0
它工作正常,但我不需要文件的父目录,我希望找到的所有文件都复制一个文件夹。
第二种方式是使用XCOPY
XCOPY /C /H /S /EXCLUDE: excludefiles.txt "%source%" "%destination%"
但是同样的问题,用他们的父目录复制文件。
使用For Loop的第三种方式,我使用相同的xcopy。
FOR "eol=| delims=" %%f IN (*.jpg,*.png) DO ( XCOPY /C /H /S /EXCLUDE:excludefiles.txt "%source%\%%~nxf" "%destination%"
但同样的问题,我尝试了for循环和副本,但副本没有在子目录中搜索的选项,对我来说这也是一个问题。
所以,如果你能帮我解决这个问题,我会感谢你。
答案 0 :(得分:1)
我搞砸了一下并提出了以下脚本(请参阅所有解释性rem
备注):
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "SOURCE=D:\" & rem // (root directory of source location)
set "TARGET=H:\copydata\" & rem // (target location)
set PATTERNS="*.jpg","*.png" & rem // (list of file patterns)
set EXCLUSIONS="D:\dontcopy\","\ignoreit\" & rem // (list of exclusions)
set "EXCLFILE=exclusions.lst" & rem /* (name of temporary exclusions file;
rem this must not contain spaces!) */
set "EXCLFDIR=%~dp0" & rem /* (location of temporary exclusions file;
rem `%~dp0` is the parent dir. of this script) */
rem // Create temporary exclusions file:
cd /D "%EXCLFDIR%"
if defined EXCLUSIONS (
> "%EXCLFILE%" (
for %%E in (%EXCLUSIONS%) do (
echo(%%~E
)
)
rem // Build exclusions option for `xcopy`:
set "EXCLUSIONS=/EXCLUDE:%EXCLFILE%"
)
rem /* Create target directory to ensure it exists
rem (if the target does not exist, `xcopy` prompts for
rem whether it is a File or a Directory; if it exists,
rem no prompt appears; `2> nul` surpresses error message
rem of `md` in case the target already exists): */
2> nul md "%TARGET%"
rem // Enumerate all files in source recursively:
for /F "eol=| delims=" %%F in ('
cd /D "%SOURCE%" ^& dir /B /S /A:-D %PATTERNS%
') do (
rem // Do the actual flat copying here:
(
rem /* Surpress output (also `1 File(s)`) by `> nul`
rem (`xcopy` outputs the copied file plus the summary
rem `1 File(s)`; to avoid that summary after each file,
rem the entire output of `xcopy` is surpressed): */
> nul xcopy /L /Y /C /H /K %EXCLUSIONS% "%%~F" "%TARGET%"
rem /* (after testing, remove `/L` to do actual copying) */
) && (
rem /* Return every copied file to see what has been copied;
rem `&&` lets `echo` execute inly if `xcopy` succeeded: */
echo(%%~F
)
)
rem // Delete temporary exclusions file:
del "%EXCLFILE%"
endlocal
exit /B
您无需为xcopy
创建排除文件(与类似的previous question一样),因为该文件是由脚本自动创建的。您只需要在Define constants here:
备注的部分中定义所有文件和目录位置,文件模式和排除项。
在测试输出是否列出您要复制的所有文件之后,您需要从/L
命令中删除xcopy
开关才能实际复制和文件
答案 1 :(得分:0)
我会使用最后一个命令进行微小改动:
pandas
这将遍历FOR /F "delims=" %%f IN ('dir /s/b *.jpg,*.png') DO ( XCOPY /H /S "%%~f" "%destination%")
列出的所有文件,还有隐藏/系统文件等的其他属性。
然后它只是将所有内容复制到平面目标文件夹中。注意:目标文件夹必须以dir /s/b *.jpg,*.png
-----编辑 - 重复另一个分区------
\