4

これを使用して、特定のフォルダーの下ですべてのファイルを書き込み可能にしようとしています

/d /r の場合。%%d in (nbproject) do @if exist "%%d" dir "%%d" /S | 属性 -R /S /D "%%d"

フォルダ内の場合

ディレクトリ "%%d" /S | 属性 -R

完全に正常に動作します。しかし、バッチ スクリプトから実行すると、正しく動作しません。お知らせ下さい。

4

1 に答える 1

6

次のようにネストされたループを使用します。フォルダー名を選択したフォルダーに変更するだけです。

@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. の出力を変数にパイプdirattribて使用していdます。必要なのは 1 つだけです。変数を使用する場合は&記号を使用し、それ以外の場合はd変数をattrib削除しdます。
  2. 特に出力をパイプする場合/bは、コマンドでオプションを使用してください。dir
  3. .for コマンドに は必要ありません。指定しない場合はカレントディレクトリとみなされます。
  4. ~ループ変数を引用するときは、二重引用符が発生しないようにチルダを使用して既存の周囲の引用符を削除します。
  5. で使用する場合/Sはオプションは不要です。attribdir

例:

for /d /r %%d in (nbproject) do @if exist "%%~d" dir "%%~d" /B /S | attrib -R /D
于 2012-12-27T14:47:37.077 に答える