繁体   English   中英

批处理-仅对具有特定名称的文件夹中的文件执行操作

[英]Batch - Act upon files that are ONLY in folders with specific name

我有以下FOR语句:

 FOR /R %%i IN ("*.wmv") DO "7za.exe" -sdel a -mx0 -tzip -pPASSWORDHERE -mem=AES256 -y "%%~dpni.zip" "%%i" 

当在任何给定目录的根文件夹中运行时,它将压缩与定义的通配符匹配的所有文件(在本例中为wmv文件),生成一个加密的ZIP文件,并保留原始名称。

我需要做的就是告诉此脚本仅对具有特定名称的文件夹执行操作。 这是一个例子:

我有一个类似于此的目录结构(并将在其中的子目录中包含wmv文件):

root
 |-20120211
   |-20
   |-21
 |-20130425
   |-34
   |-21
 |-20140516
   |-10
   |-22
 |-20150728
   |-230
   |-213
 and so on...

我需要做的是例如仅压缩最后一个文件夹中的所有文件,该文件名以2015 *开头

为此,我尝试了串联FOR语句,更具体地说,类似于:

 FOR /D %%P IN (2015*) DO (run my other FOR here)

但是它唯一要做的就是验证该结构中的文件夹名称是否匹配“ 2015 *”,如果匹配,那么...好吧...它只是压缩所有内容,所有文件夹中的所有文件,而不仅仅是压缩那些从“ 2015”开始。

我已经在网上搜索过,但是没有找到可以帮助我解决这个问题的实际示例。 如果您能帮助我实现这一目标,我将为您着迷=)

预先感谢一百万!

FOR /D %%P IN (2015*) DO PUSHD "%%P"&(FOR /R %%i IN ("*.wmv") DO ECHO %%i)&POPD

应该完成任务,给出描述。

文件名只是echo ed。 请记住,当前目录将是执行echo显时的要归档文件的目录,因此,用archive指令替换echo将要求指定所需的目标目录。

假设项目2021 ,等等,都是文件夹以及,其中包含所有的*.wmv文件,下面应该工作:

for /D %%D in ("root\2015*") do (
    for /D %%E in ("%%~D\*") do (
        for %%F in ("%%~E\*.wmv") do (
            "7za.exe" -sdel a -mx0 -tzip -pPASSWORDHERE -mem=AES256 -y "%%~dpnF.zip" "%%~F"
        )
    )
)

如果*.wmv文件也可能位于父文件夹(如20150728 ,则可以在for /D循环中嵌套for /R循环,如下所示:

for /D %%D in ("root\2015*") do (
    call :SUB "%%~D"
)
exit /B

:SUB
for /R "%~1" %%F in ("*.wmv") do (
    "7za.exe" -sdel a -mx0 -tzip -pPASSWORDHERE -mem=AES256 -y "%%~dpnF.zip" "%%~F"
)
exit /B

在这里你需要一个子程序,因为for /R不接受其他for变量作为后根/R 这是由于根是在非常早的解析阶段施加的事实for变量尚未处理/扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM