对于多个文件夹中某些子文件夹中的文件
forfiles in certain subfolder in multipule folders
当这样的子文件夹位于多个位置时,是否只显示名为 "Export" 的文件夹中的文件?
这将在我 运行 批处理文件所在的位置下方显示所有 .xlsx
文件,但是我不想显示所有文件,我只想显示名为的文件夹中的内容"Export":
forfiles -p "%~dp0\" -s -m *.xlsx -d -365 -c "cmd /c ECHO @relpath"
我尝试过类似的事情:
forfiles -p "%~dp0\*\Export" -s -m *.xlsx -d -365 -c "cmd /c ECHO @relpath"
但是它不识别这样的语法。说 invalid argument/option
,但在我将 *\
添加到路径之前它们是有效的。
这是我正在使用的结构示例以及要显示的结果:
%~dp0\Exports\Excel\ - (Do display .xlsx files)
%~dp0\Do Not Delete\Excel\ - (Don't display .xlsx files)
%~dp0\Exports\Excel\ - (Do display .xlsx files)
%~dp0\Do Not Delete\Excel\ - (Don't display .xlsx files)
文件夹数量在某种程度上是一个变量,这就是我尝试 *\
的原因。
当我知道它选择了正确的文件时,我将编辑它以删除文件。
您可以像这样将 |
的结果发送到 FINDSTR
:
FORFILES /P . /S /M *.xlsx /D -365 /C "CMD /C ECHO @path" | ^
FINDSTR "\Exports\" | ^
FINDSTR /I /C:Delete /V
所以你搜索位于特定路径的每个 xlsx 文件(这里是当前目录)每个 xlsx 必须包含导出为文件夹并显示每个不包含的 xlsx(/V
仅显示不匹配的行) 包含 "delete" (/I
表示不敏感)
在批处理文件中,您可以将 /P .
替换为任何可变路径 /P "%~dp0"
/P "%CD%"
或作为参数发送 /P %1
您也可以使用 FOR 循环为每场比赛制作任何命令。
在一行中放入控制台:
FOR /F "usebackq delims=" %A in (`forfiles /p . /s /m *.xlsx /D -365 /C "cmd /c ECHO @path" ^|FINDSTR "\Exports\" ^|FINDSTR /I /C:Delete /V`) DO @ECHO FAKE-COMMAND %A
在批处理文件中:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%A in (
`forfiles /p . /s /m *.xlsx /D -365 /C "cmd /c ECHO @path" ^|FINDSTR "\Exports\" ^|FINDSTR /I /C:Delete /V`
) DO (
SET "myfile=%%~A"
@ECHO FAKE-COMMAND "!myfile!"
)
ENDLOCAL
GOTO :EOF
您可以使用两个嵌套的 forfiles
循环:
forfiles /S /P "%~dp0\" /M "Export*" /C "cmd /C if @isdir==TRUE forfiles /P @path\Excel /M *.xlsx /D -365 /C 0x22cmd /C echo 00x7840path0x22"
此命令行递归遍历给定的根目录 (%~dp0
) 并遍历所有匹配 Export*
的项目(您可以将此模式替换为 Export
或 Exports
,取决于您的需要);不检查层级深度以避免需要 ot three 嵌套循环。无论如何,如果迭代项是目录,则枚举子目录 Excel
并搜索匹配 *.xlsx
.
的项
补充:
以上命令行可能会显示许多错误消息,如 ERROR: The specified directory does not exist.
或 ERROR: Files of type "*.xlsx" not found.
,具体取决于您的数据;为了避免它们,将 STDERR 重定向到 nul
设备:
2> nul forfiles /S /P "%~dp0\" /M "Export*" /C "cmd /C if @isdir==TRUE forfiles /P @path\Excel /M *.xlsx /D -365 /C 0x22cmd /C echo 00x7840path0x22"
forfiles
命令returns一个空行到STDOUT,所以上面的命令行会包含很多;为了避免这种情况,将 STDERR 和 STDOUT 重定向到 nul
设备并仅将所需数据重定向到控制台 con
:
1> nul 2>&1 forfiles /S /P "%~dp0\" /M "Export*" /C "cmd /C if @isdir==TRUE forfiles /P @path\Excel /M *.xlsx /D -365 /C 0x22cmd /C 1> con echo 00x7840path0x22"
当这样的子文件夹位于多个位置时,是否只显示名为 "Export" 的文件夹中的文件?
这将在我 运行 批处理文件所在的位置下方显示所有 .xlsx
文件,但是我不想显示所有文件,我只想显示名为的文件夹中的内容"Export":
forfiles -p "%~dp0\" -s -m *.xlsx -d -365 -c "cmd /c ECHO @relpath"
我尝试过类似的事情:
forfiles -p "%~dp0\*\Export" -s -m *.xlsx -d -365 -c "cmd /c ECHO @relpath"
但是它不识别这样的语法。说 invalid argument/option
,但在我将 *\
添加到路径之前它们是有效的。
这是我正在使用的结构示例以及要显示的结果:
%~dp0\Exports\Excel\ - (Do display .xlsx files) %~dp0\Do Not Delete\Excel\ - (Don't display .xlsx files) %~dp0\Exports\Excel\ - (Do display .xlsx files) %~dp0\Do Not Delete\Excel\ - (Don't display .xlsx files)
文件夹数量在某种程度上是一个变量,这就是我尝试 *\
的原因。
当我知道它选择了正确的文件时,我将编辑它以删除文件。
您可以像这样将 |
的结果发送到 FINDSTR
:
FORFILES /P . /S /M *.xlsx /D -365 /C "CMD /C ECHO @path" | ^
FINDSTR "\Exports\" | ^
FINDSTR /I /C:Delete /V
所以你搜索位于特定路径的每个 xlsx 文件(这里是当前目录)每个 xlsx 必须包含导出为文件夹并显示每个不包含的 xlsx(/V
仅显示不匹配的行) 包含 "delete" (/I
表示不敏感)
在批处理文件中,您可以将 /P .
替换为任何可变路径 /P "%~dp0"
/P "%CD%"
或作为参数发送 /P %1
您也可以使用 FOR 循环为每场比赛制作任何命令。
在一行中放入控制台:
FOR /F "usebackq delims=" %A in (`forfiles /p . /s /m *.xlsx /D -365 /C "cmd /c ECHO @path" ^|FINDSTR "\Exports\" ^|FINDSTR /I /C:Delete /V`) DO @ECHO FAKE-COMMAND %A
在批处理文件中:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%A in (
`forfiles /p . /s /m *.xlsx /D -365 /C "cmd /c ECHO @path" ^|FINDSTR "\Exports\" ^|FINDSTR /I /C:Delete /V`
) DO (
SET "myfile=%%~A"
@ECHO FAKE-COMMAND "!myfile!"
)
ENDLOCAL
GOTO :EOF
您可以使用两个嵌套的 forfiles
循环:
forfiles /S /P "%~dp0\" /M "Export*" /C "cmd /C if @isdir==TRUE forfiles /P @path\Excel /M *.xlsx /D -365 /C 0x22cmd /C echo 00x7840path0x22"
此命令行递归遍历给定的根目录 (%~dp0
) 并遍历所有匹配 Export*
的项目(您可以将此模式替换为 Export
或 Exports
,取决于您的需要);不检查层级深度以避免需要 ot three 嵌套循环。无论如何,如果迭代项是目录,则枚举子目录 Excel
并搜索匹配 *.xlsx
.
补充:
以上命令行可能会显示许多错误消息,如 ERROR: The specified directory does not exist.
或 ERROR: Files of type "*.xlsx" not found.
,具体取决于您的数据;为了避免它们,将 STDERR 重定向到 nul
设备:
2> nul forfiles /S /P "%~dp0\" /M "Export*" /C "cmd /C if @isdir==TRUE forfiles /P @path\Excel /M *.xlsx /D -365 /C 0x22cmd /C echo 00x7840path0x22"
forfiles
命令returns一个空行到STDOUT,所以上面的命令行会包含很多;为了避免这种情况,将 STDERR 和 STDOUT 重定向到 nul
设备并仅将所需数据重定向到控制台 con
:
1> nul 2>&1 forfiles /S /P "%~dp0\" /M "Export*" /C "cmd /C if @isdir==TRUE forfiles /P @path\Excel /M *.xlsx /D -365 /C 0x22cmd /C 1> con echo 00x7840path0x22"