我有以下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"。
开头的文件我已经在网上搜索过,但没有找到可以帮助我的实际例子。如果你能帮助我实现这一目标,我会感激你=)
提前感谢一百万人!
答案 0 :(得分:1)
FOR /D %%P IN (2015*) DO PUSHD "%%P"&(FOR /R %%i IN ("*.wmv") DO ECHO %%i)&POPD
在给出描述的情况下,应该完成任务。
文件名只是echo
ed。请记住,当前目录将是echo
执行时的文件归档目录,因此用归档指令替换echo
将需要指定所需的目标目录
答案 1 :(得分:0)
假设项目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 /R
循环中嵌套for /D
循环,如下所示:< / p>
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
变量尚未处理/扩展。