如何批量添加attrib到FOR循环内的重命名文件

时间:2015-09-18 10:41:14

标签: windows batch-file

我作为业余爱好在maxscript中编写了几年的脚本,最近才开始摆弄批处理文件(所以我非常擅长新手)。

我有两个问题:我想在重命名扩展后将attrib应用于循环中的文件(通过文件列表)。这是我到目前为止(我在网上找到的代码在批处理的窗口标题中添加进度%):

set n=0
for /r %~d0\$RECYCLE.DATA\$DELETED\[_$G]\ %%f in (*.jpg) do set /a n+=1
echo File count = %n%

rem Fill "bar" variable with 70 characters
set "bar="
for /l %%i in (1,1,70) do set "bar=!bar!|"

rem Fill "space" variable with filler spaces
set "space="
for /l %%i in (1,1,1) do set "space=!space!"

rem "Process" the files and show the progress bar in the title
set i=0

for /r %~d0\$RECYCLE.DATA\$DELETED\[_$G]\ %%f in (*.jpg) do (
    set /a i+=1, percent=i*100/n, barLen=70*percent/100
    for %%a in (!barLen!) do title !percent!%% !bar:~0,%%a!%space%
    ren "%%f" "%%~nf.g"
    attrib +s +h "%%~nf.g" REM DOESN'T WORK!!
    echo !i!:  Collapsing $G %%~nxf  
)

我在 " attrib + s + h" %% ~nf.g"这一行尝试了一些变体。 REM已经和%% f一起工作!!" 但它给我一个错误,它无法找到该文件(我猜它会被重命名)。我们如何在刚刚重命名的循环中将attrib + h + s添加到该特定文件?

第二个问题是我如何申请" attrib + s + h"仅限父文件夹及其自身的子文件夹,但根本不触摸内部文件?批处理文件位于父文件夹之外。

我尝试做的是在父文件夹的子文件夹中的目录中重命名文件扩展名,将attrib + h + s应用于各自子文件夹中的每个重命名文件,然后一旦完成attrib + h + s只是文件夹本身,但不会触摸文件,因为它们已经被处理过了。 (我想在两个单独的传递中执行文件和文件夹,因此我可以在上面的代码中看到进度%。)

感谢您的帮助,我真的很感激!

编辑:我在脚本的顶部设置了这些设置 - >

setlocal EnableExtensions
setlocal EnableDelayedExpansion 

2 个答案:

答案 0 :(得分:0)

你试过吗

attrib +s +h "%%~nf.g"

答案 1 :(得分:0)

使用包含的这些行进行测试,然后查看重命名的内容。

echo ren "%%f" "%%~nf.g"
echo attrib +s +h "%%~dpnf.g"
pause