[英]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
将要求指定所需的目标目录。
假设项目20
, 21
,等等,都是文件夹以及,其中包含所有的*.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.