2014-01-23 31 views
2

我需要運行批處理文件來設置許多文件夾的權限。在批處理文件中使用空格?

我們有以下文件夾結構

Folder1中Folder1中\客戶端1 Folder1中\客戶端2 Folder1中\ Client3然後,每個客戶端文件夾內,我們有幾個子文件夾,例如文件夾1 \客戶端1 \ SubFolder1文件夾1 \客戶端1 \ SubFolder2文件夾1 \客戶端1 \ SubFolder3

我需要在例如在所有子文件夾的權限重置以上,並有下面的代碼在一個名爲permissions.bat

for /f %%g in ('dir "f:\temp\" /ad /b') do for /f %%a in ('dir %%~fg /ad /b') do icacls 
"%%~fg\%%a" /grant:r domain\mygroup:(OI)(CI)M 
文件

這工作正常,但對於包含空格的客戶端和子文件夾不起作用。例如

Folder1\Client1\Sub Folder 1 

會顯示爲

Folder1\Client1\Sub\ 

緊隨其後的系統找不到指定的文件錯誤。有任何想法嗎?

這是順便在2003 Server上運行的。

回答

1

我'd use

for /f "delims=" %%g in ('dir "f:\temp\" /ad /b') do (
for /f "delims=" %%a in ('dir %%~fg /ad /b') do (
    icacls "%%~fg\%%a" /grant:r domain\mygroup:(OI)(CI)M 
) 
) 

"delims=" disables delimiters and so applie整個dir行與元變量(%% g,%% a)無關。

爲了便於閱讀,我在多行上打破了命令。如果您願意的話,您可以將它全部放在一行上,當之後,每個do和最後兩個將成爲多餘的。

2

FOR循環的默認分隔符是空格和製表符。您需要指定分隔符只是反斜槓。例如:

for /f "tokens=* delims=\" %%g in ('dir "f:\temp\" /ad /b') do ... 

這裏看到更多的信息:Tokens and Delims

沒有與腳本其他一些額外的問題,但我相信下面就爲你工作:

SET folder=F:\temp 
for /f "tokens=* delims=\" %%g in ('dir "%folder%\" /ad /b') do for /f %%a in ('dir "%folder%\%%g" /ad /b') do icacls "%folder%\%%g\%%a" /grant:r domain\mygroup:(OI)(CI)M