2017-02-09 8 views
1

からループでICACLS設定を保存:追加は、C内のファイルやフォルダのリストを想定すると、ファイル

for /f eol^=^"^ delims^=^" %a in (C:\temp\listoffolders.txt) do cmd.exe /c icacls "%a" /save C:\temp\listoffolders.txt\iCACLSBackup.txt 

listoffolders.txt出力が最適です...しかし、私は克服する必要がある問題が追加される\ \ tempにします保存したファイルへのデータではなく、上書き...

答えて

0

一時ファイルにACLを保存し、統合ファイルに一時ファイルを追加する複合コマンドを使用します。

@echo off 
:: 
:: Reads pathnames from the file listoffiles.txt and saves the 
:: corresponding ACLs in listofacls.txt 
:: 
set TEMPFILE=tmp%RANDOM%-%RANDOM%.txt 
if exist listofacls.txt del listofacls.txt 
for /f "delims="" eol=""" %%f in (listoffiles.txt) do (
    echo "%%f" 
    icacls "%%f" /save %TEMPFILE% >nul 
    type %TEMPFILE% >>listofacls.txt 
) 
del %TEMPFILE% 

(ティsは大まかで準備ができたスクリプトです。プロダクションでは、小数点のエラーチェックを追加し、テンポラリファイルを%TEMP%に配置するなど)。

別の質問があります。 icaclsは、UTF-16リトルエンディアンエンコーディングを使用してファイルにACLを保存することに注意してください。そこにはヌルバイトがたくさんあります。

+0

: 「C:\プログラムファイル\マイクロソフト政策プラットフォーム\ policyHost.exe」/サービス 無効なパラメータ「のFiles \ Microsoftの」 それはlistofacls.txtファイルを作成して行いますが、それはあります空白 – thatotheritguy

+0

@thatotheritguy:ファイルのリストを含むファイルには何が入っていますか?私は 'dir/b'の直接出力を使ってこのスクリプトをテストしました。そして、 '/ service'はどこから来たのですか?いずれにしても、このスクリプトは、各ファイルのACLをテンポラリファイルに書き込んだ後、 'type >>'を使用してそのファイルをマスターファイルに追加するという手法を示すためのものでした。 – AlexP

+0

元のファイルは、wmicコール for/fのトークンによって生成されます。トークン= 2 delims = '=' "%a( 'wmicサービスリストfull^| find/i"パス名 "^ | find/i/v" system32 ")@echo%a >> c:¥windows¥temp¥listoffolders.txt' exeファイルが存在する場合はサービス呼び出しと同様に表示されます – thatotheritguy

0

C:\temp\iCACLSBackup.txt)最終的なターゲットファイルにコンテンツを追加するために、次を使用し、その後、あなたのコマンドラインは、一時ファイル(例えば、C:\temp\iCACLSBackup.tmp)に書いてみましょう:

copy /Y /B "C:\temp\iCACLSBackup.txt"+"C:\temp\iCACLSBackup.tmp" "C:\temp\iCACLSBackup.txt" 

は、一時ファイルをクリーンアップしますその後:

del "C:\temp\iCACLSBackup.tmp" 

あなたも、単一のコマンドラインですべてのことを使用することができます。

(for /F usebackq^ eol^=^"^ delims^=^" %a in ("C:\temp\listoffolders.txt") do icacls "%~a" /SAVE "C:\temp\iCACLSBackup.tmp") && copy /Y /B "C:\temp\iCACLSBackup.txt"+"C:\temp\iCACLSBackup.tmp" "C:\temp\iCACLSBackup.txt" && del "C:\temp\iCACLSBackup.tmp" 

演算子&&は、前のコマンドが成功した場合、つまり終了コードがゼロの場合にのみ、次のコマンドを実行します。

cmd /C部分は省略されていますが、これは必ずしも必要ではないと思います。各項目の無効なパラメータを提供

関連する問題