gpt4 book ai didi

batch-file - forfiles 命令忽略一个目录

转载 作者:行者123 更新时间:2023-12-01 13:47:35 25 4
gpt4 key购买 nike

我想写一个批处理,在 c:\ 中找到所有小于 50 mb 的文档,并将它们复制到一个文件夹中,但忽略系统目录文档。我更喜欢它甚至不在系统目录中搜索。

这是我的批处理,它在正确的目录中查找并复制小于 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

最佳答案

当提供开关 /S 时,无法告诉 forfiles 排除某些目录。您将必须编写自己的代码来执行此操作。

由于性能不佳,我不会为此使用 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 结尾的文件> 例如,我猜你不想被检索到。

您可以直接将 xcopy 命令行与 "%%F" 作为复制源,而不是 echo 命令。


您可以直接在命令提示符下直接执行相同的操作,就像这样:

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%"

关于batch-file - forfiles 命令忽略一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34755559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com