我想编写一个批处理,在c:\中找到所有小于50 mb的文档,并将它们复制到一个文件夹中,但忽略系统目录docs。我宁愿它甚至不搜索系统dir。
这是我的批处理,它在正确的目录中找到和复制所有小于50 mb的文件,但是我不能让它忽略系统搜索或C:\Windows目录。
@ECHO off
:: variables
SET odrive=%odrive:~0,2%
SET backupcmd=xcopy /s /c /d /e /h /i /r /y
MKDIR "C:\Users\Documents\USBBackups\DOC\C"
forfiles /P C:\ /M *.DOC* /S /C "cmd /c if @fsize leq 50000000 echo @PATH " > "C:\Users\Documents\USBBackups\DOCC.txt"
FOR /F "tokens=*" %%a in (C:\Users\Documents\USBBackups\DOCC.txt) do xcopy %%a "C:\Users\Documents\USBBackups\DOC\C" /c /h /i /r /y
@ECHO off发布于 2016-01-13 00:44:38
在提供开关forfiles时,无法告诉/S排除某些目录。您必须编写自己的代码才能做到这一点。
由于性能不佳,我不会为此使用forfiles,而是使用标准for:
@echo off
for /D %%D in ("%SystemDrive%\*.*") do (
if /I not "%%D"=="%SystemRoot%" (
pushd "%%D"
for /R %%F in ("*.doc?") do (
if %%~zF LEQ 50000000 (
echo %%F
)
)
popd
)
)在这里,根目录级别由for /D枚举。%SystemRoot%以外的所有目录都由for /R递归地枚举。
我将搜索模式从*.doc*更改为*.doc?,以便不包括以.doc.lnk结尾的文件,我猜您不希望检索这些文件。
与echo命令不同,您可以直接将xcopy命令行与作为复制源的"%%F"放在一起。
您可以在命令提示符中直接执行与一行程序相同的操作,如下所示:
for /D %D in ("%SystemDrive%\*.*") do @if /I not "%D"=="%SystemRoot%" pushd "%D" & (for /R %F in ("*.doc?") do @if %~zF LEQ 50000000 echo %F) & popd我建议不要遍历整个目录树,然后再通过类似于findstr /V /I /L /B /C:"%SystemRoot%"的内容进行过滤,因为在这种情况下,您是在浪费时间枚举大量的项目,然后忽略这些项。
但是,如果您确实希望依赖forfiles /S,则工作命令行如下所示:
2> nul forfiles /S /P "C:\\" /M "*.doc*" /C "cmd /C if @isdir==FALSE if @fsize LEQ 50000000 echo @path" | findstr /V /I /L /B /C:"\"%SystemRoot%"发布于 2016-01-13 00:24:30
采用这种使用findstr过滤掉某些名称的技术。
若要查看文档中文件夹的大小,不包括音乐、视频或图片文件夹。
for /f "skip=3 tokens=3" %A in ('Reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Personal"') do set doc=%A
for /f "usebackq tokens=2* delims= " %i IN (`dir "%doc%" /a /s ^|findstr /i /v "\/"^|findstr /l /v "Pictures Music Video"`) DO @echo %j&echo.但是,您可以在c:\users或特定用户主文件夹(%userprofile%)中启动forfiles命令。您指定从c:\开始,它包含所有文件夹。
forfiles /P %userprofile% /M .DOC /S /C "cmd /c if @fsize leq 50000000 echo @PATH "
forfiles /P c:\users /M .DOC /S /C "cmd /c if @fsize leq 50000000 echo @PATH "https://stackoverflow.com/questions/34755559
复制相似问题