アクセス
依然作ったファイルは単にファイルa.txtができるだけでしたが、今回はファイル名に日付と時間を用意しました。
1日で何回保存しても秒単位でファイル名が変更していくので上書きしてしまう心配がありません。
(また現在、OneDrive使用なので、フォルダの途中にOneDrive用のフォルダがいます。)
@echo off
:: 管理者権限で再実行する
:: 管理者権限がない場合、管理者権限で再実行する
net session >nul 2>&1
if %errorLevel% neq 0 (
echo 管理者権限で再実行しています...
powershell -Command "Start-Process '%~f0' -Verb RunAs"
exit /b
)
set str_date=%date%
set str_time=%time: =0%
rem フォルダを指定
set "folder=C:\Users\maedat\OneDrive - 〇〇〇▲▲▲株式会社\ドキュメント\aclfolder"
:: フォルダ内の全ファイルとフォルダのアクセス権データを収集し、保存
icacls "%folder%" /T /C /save "C:\Users\maedat\OneDrive - 〇〇〇▲▲▲株式会社\デスクトップ\downloads\%str_date:~0,4%_%str_date:~5,2%%str_date:~8%_%str_time:~0,2%%str_time:~3,2%_%str_time:~6,2%.txt"
①こちらはアクセス権を過去に戻すbatchで特定のフォルダ内にたまったACLのテキストファイルを番号を新しいファイルから採番して、表示
②採番された番号を入力して過去のアクセス権を指定番号のファイルを読み込んで展開するという仕組みに変更しました。
@echo off
:: 管理者権限で再実行する
net session >nul 2>&1
if %errorLevel% neq 0 (
echo 管理者権限で再実行しています...
powershell -Command "Start-Process '%~f0' -Verb RunAs"
exit /b
)
setlocal enabledelayedexpansion
rem フォルダを指定
set "folder=C:\Users\maedat\OneDrive - 〇〇〇▲▲▲株式会社\デスクトップ\downloads"
rem フォルダ内のファイル一覧を表示
echo ファイル一覧:
set i=1
for %%f in ("%folder%\*.*") do (
echo !i!. %%~nxf
set "file!i!=%%f"
set /a i+=1
)
rem ユーザーにファイル番号を選ばせる
set /p choice=番号を選んでください:
rem 選択されたファイルを変数にセット
set "selectedFile=!file%choice%!"
:: 保存したアクセス権データを復元
cd "C:\Users\maedat\OneDrive - 〇〇〇▲▲▲株式会社\ドキュメント"
icacls .\ /restore "%selectedFile%" /C
if %errorLevel% neq 0 (
echo アクセス権データの復元に失敗しました。
) else (
echo アクセス権データの復元に成功しました。
)
説明書き
参照[バッチファイルの基本的な書式と考え方]
https://qiita.com/go1101/items/a2df957120b709b94273
バッチファイル入門
https://batchfile.hideharublog.com/batchfile-environmental-variables/
環境変数の設定方法(Windows)
https://sukkiri.jp/technologies/os/windows/env_setting.html
遅延環境変数の使用を宣言する
バッチファイルには 環境変数の即時展開という特徴があり、環境変数が読み込まれた時点で値を確定してしまいます。
■環境変数とは
まず、環境変数とは、OSに保存するさまざまな設定値をいいます
Windowsには・・・
(1)システム環境変数
(2)ユーザー環境変数
の2つ用意されています。
PCを利用するすべてのユーザーが共有して利用する値が記録されています。(1)
ユーザー環境変数には、それぞれのユーザーごとに個別の設定が記録されています。(2)
よく使われる環境変数として、プログラムがインストールされた場所を示す「Path」や、一時保存ファイルの保管場所を示す「TEMP」などがあります。システム環境変数とユーザー環境変数の両方にこれらの設定値が保存されているので、同一のPCを利用するユーザー全体や、ある特定のユーザーそれぞれで「Path」や「TEMP」を使い分けることができます。
環境変数の即時展開を防ぐためには遅延環境変数を使用します。
setlocal enabledelayedexpansionを定義する
変数を%ではなく!で囲む
@echo off
①---set hensu_a=ピヨ太
if "%hensu_a%" == "ピヨ太" (
set hensu_a=ピヨ子
echo %hensu_a%
)
①---set hensu_a=ピヨ太 hensu_aを「ぴよ太」と定義