2012-12-27 70 views
3

我试图用这个使文件可写递归

用于/ d/r选择特定文件夹下的所有文件写。 %n d in(nbproject)do @if exists“%% d”dir“%% d”/ S | ATTRIB -R/S/d “%% d”

一个文件夹

DIR “%% d”/ S时内部| attrib -R

完美无缺。但是从批处理脚本运行时,它无法做正确的事情。请指教。

回答

5

使用如下所示的嵌套循环:只需将文件夹名称更改为您选择的文件夹即可。

@echo off 
for /D /R %%D in (nbproject Folder2 Folder3) do if exist "%%~fD" (
    pushd "%%~fD" 
    for /R %%F in (*) do if exist "%%~fF" attrib -R "%%~fF" /D 
    popd 
) 

一个内胆:

for /D /R %%D in (nbproject Folder2 Folder3) do @if exist "%%~fD" @cd /D "%%~fD" && for /R %%F in (*) do @if exist "%%~fF" attrib -R "%%~fF" /D 

让我们也打破你的第一行代码的原因它可能会失败。

  1. 您管道的dir输出到attrib和使用该d变量。只需要一个。如果使用d变量与attrib,则使用&符号,否则请删除d变量。
  2. 使用/b选项和dir命令,特别是在管道输出时。
  3. for命令中不需要.。未指定时假定当前目录。
  4. 引用循环变量时,请使用波形号~删除现有的周围引号,以避免发生双引号。
  5. 当在dir中使用attrib时,不需要/S选项。

例子:

for /d /r %%d in (nbproject) do @if exist "%%~d" dir "%%~d" /B /S | attrib -R /D 
+0

三江源的解释,但是这使得所有文件写的,在nbproject文件的同一层级的所有文件夹。尝试了一些变化,但无法完成。 –

+0

@BasitAnwer我修复了我的代码,只搜索有问题的目录。不过,我修正的代码对我来说工作得很好。您所要做的就是将每个文件夹名称添加到第一个for循环父项内的空格分隔列表中。 –

+0

对不起,但你修复的代码不工作......尝试一些后,我设法让它工作==== for/d/r。 %n d in(nbproject)do @if exists“%%〜d”dir“%% d”/ S | attrib -R“%%〜d”\ *。*/S/D –