2012-12-27 2 views
3
Faire

Je suis en train de faire tous les fichiers inscriptibles sous certains dossiers à l'aide de cettefichiers inscriptibles récursive

pour/d/r. %% d dans (nbproject) do @if existe-t-il "%% d" dir "%% d"/S | attrib -R/S/D "%% d"

lorsque l'intérieur d'un dossier

dir "%% d"/S | attrib -R

fonctionne parfaitement bien. Mais lorsque vous exécutez un script batch, il est incapable de faire les choses correctement. S'il vous plaît donnez votre avis.

Répondre

5

Utilisez des boucles imbriquées comme celle-ci: Modifiez simplement les noms de dossiers dans les dossiers de votre choix.

@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 
) 

Une doublure:

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 

Démantelons également votre première ligne de code pour des raisons où il peut échouer.

  1. Vous êtes en redirigeant la sortie de dir en attrib et en utilisant la variable d. Un seul est nécessaire. Utilisez le symbole & si vous utilisez la variable d avec attrib sinon supprimez la variable d.
  2. Utilisez l'option /b avec la commande dir, en particulier lors de l'acheminement de sa sortie.
  3. La commande for n'a pas besoin de .. Le répertoire en cours est supposé lorsqu'il n'est pas spécifié.
  4. Lorsque vous citez une variable de boucle, utilisez le tilde ~ pour supprimer les cotations existantes afin que les guillemets doubles ne se produisent pas.
  5. L'option /S n'est pas nécessaire avec attrib lors de son utilisation dans dir.

Exemple:

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

Merci pour l'explication, mais ce qui rend tous les fichiers inscriptibles, dans tous les dossiers du même niveau de hiérarchie des nbproject. J'ai essayé quelques variations mais je n'ai pas pu le faire. –

+0

@BasitAnwer J'ai corrigé mon code pour ne rechercher que le répertoire en question. Cependant, le code que vous avez fixé fonctionne très bien pour moi. Tout ce que vous avez à faire est d'ajouter chaque nom de dossier à la liste délimitée par des espaces dans la première parenthèse de boucles. –

+0

Je suis désolé, mais le code que vous avez corrigé n'a pas fonctionné ... après avoir essayé quelques-uns, j'ai réussi à le faire fonctionner ==== pour/d/r. %% d dans (nbproject) do @if existe-t-il? "%% ~ d" dir "%% d"/S | attrib -R "%% ~ d" \ *. */S/D –

Questions connexes