@echo off rem cls rem @echo "%0" "%1" "%2" set version=1.07 goto LABEL_START :_HELP01 echo ----------------------------------------------------------------------------- echo パスワード付き隠しフォルダをBATで作る (Ver %version%) パスワード初期値=0000 echo. echo 最初に、この _0000.bat を実行すると echo [日時].bat .... 起動BATファイル [日時]はこのbat作成時の年月日時分秒 echo ごみ箱/0000 ... (非表示)隠しフォルダ[ごみ箱]/(表示)表示時のフォルダ[0000] echo _0000_h.bat ... (非表示)パスワード等の定義ファイル echo _0000.bat ..... (非表示)このファイルを非表示にしたもの echo が展開されます。(非表示)のファイルがあるので、通常は、 echo [日時].bat しか表示されません。 echo. echo メニュー画面から、メニュー専用起動BATファイル echo 0000menu.bat .. メニューBATファイル (隠しフォルダ内でも実行できます) echo を作成できます。 echo. echo 使い方は、 echo [日時].bat を起動し、パスワードを入力すれば隠しフォルダを表示にします。 echo 再度 [日時].bat を起動すると隠しフォルダにします。 echo 隠しフォルダのままで、フォルダ内にアクセスできる指定もできます。 echo. echo 起動時パスワード入力画面では、パスワード以外に以下のコマンドが使えます。 echo %CMD_MENU% メニュー echo %CMD_EXIT% 終了 echo ----------------------------------------------------------------------------- exit /b :_HELP02 echo ----------------------------------------------------------------------------- echo [日時].bat と 0000menu.bat は、同じ場所にある _0000.bat(非表示)を実行しようと echo しますが、 echo 無ければ、ドライブA:〜Z:のルートディレクトリも探して実行しようとします。 echo 例えば、USBメモリのルートディレクトリに隠しフォルダを導入した場合、 echo [日時].batをデスクトップにコピーしてUSBメモリから削除しておけば、 echo 見かけ上ファイルが無いUSBメモリをデスクトップから操作できます。 echo. echo コマンドのオプション指定 echo _0000.bat /menu メニューを起動 echo _0000.bat /show 隠しフォルダを表示 echo _0000.bat /hide フォルダを隠蔽 echo. echo 注意: echo  本ソフトウェアを使用した事により生じたいかなる障害・損害等について、 echo  作者(著作権者)は一切の責任を負わないものとします。 echo  同意いただけない場合には、このソフトウェアの使用を禁止します。 echo ----------------------------------------------------------------------------- exit /b :LABEL_START rem (初期値) set THIS_FNAME=%~n0%~x0 set THIS_ATR=%~a0 set HEAD_BAT=%~n0_h%~x0 set BOOT_BAT=0000.bat set MENU_BAT=0000menu.bat set DISP_DIR_NAME=0000 set HIDE_DIR_NAME=ごみ箱 set PW_INI=0000 set PWORD=%PW_INI% set HIDE_MODE=OFF set HIDE_CONTINUE=OFF set DISP_WINDOW=OFF rem (引数による指定コマンド) set CMD_OP=%1 rem (指定コマンドを定義) set CMD_BOOT=/boot set CMD_MENU=/menu set CMD_SHOW=/show set CMD_HIDE=/hide set CMD_EXIT=exit rem (隠しフォルダ属性を定義) set HIDE_ATR=+h +s set DISP_ATR=-h -s rem (キー入力画面メセージ) set INPUT_COMMAND_MESSAGE=Input command or "%CMD_EXIT%" rem (サブルーチン用の引数 : スペースが含まれる文字列用) set trim_arg= set to_lower_arg= set to_upper_arg= rem --[start]----------------------------------- rem (定義ファイルが無ければ起動BATファイルと供に作成) if not exist %HEAD_BAT% ( call :_MAKE_HEAD_BAT call :_MAKE_BAT %CMD_BOOT% rem call :_MAKE_MENU_BAT call :_HELP01 ) rem (ユーザーによる設定値を読み込み) call %HEAD_BAT% rem (パスワードの前後の空白を削除) rem set trim_arg=%PWORD% rem call :_TRIM rem set PWORD=%trim_arg% rem (隠蔽モードを調べる) call :_GET_HIDE_MODE rem (フォルダチェック:無ければ作成し非表示に変更) if exist %DISP_DIR_NAME% ( rem (トラブル時の修復作業) if not %DISP_DIR_NAME%==%HIDE_DIR_NAME% ( rem (表示フォルダが隠し設定になっていた場合) if %HIDE_MODE%==ON ( call :_SET_DISP_ATR_DIR call :_HIDE_ON ) ) goto BEGIN ) if exist %HIDE_DIR_NAME% goto BEGIN md %DISP_DIR_NAME% call :_HIDE_ON :BEGIN rem (指定されたコマンドで動作決定) if "%CMD_OP%"=="%CMD_MENU%" goto MENU if "%CMD_OP%"=="%CMD_SHOW%" goto SHOW if "%CMD_OP%"=="%CMD_HIDE%" goto HIDE rem (ファイルの属性で動作決定) if %HIDE_MODE%==OFF goto HIDE if %HIDE_MODE%==ON goto CONSOLE rem (フォルダの有無で動作決定) if exist %DISP_DIR_NAME% goto HIDE if exist %HIDE_DIR_NAME% goto CONSOLE goto END rem (パスワード/コマンド 入力コンソール画面) :CONSOLE rem (パスワード入力が主目的なのでチェック) if not exist %HIDE_DIR_NAME% ( echo ERROR [%HIDE_DIR_NAME%] がありません pause goto END ) rem (キー入力) :KEY_IN_LOOP ECHO %INPUT_COMMAND_MESSAGE% set CMD="" set /p "CMD=>" if "%CMD%"=="%PWORD%" goto DISP_WIN_PW if "%CMD%"=="%CMD_MENU%" goto MENU_PW if "%CMD%"=="%CMD_EXIT%" goto END rem cmd /c %CMD% goto KEY_IN_LOOP :MENU_PW set CMD="" set /p "CMD=パスワード>" if "%CMD%"=="%PWORD%" goto MENU goto KEY_IN_LOOP rem (パスワードOK) :DISP_WIN_PW rem (PWで隠蔽解除するなら解除) if "%HIDE_CONTINUE%"=="OFF" call :_HIDE_OFF rem (フォルダ内を別ウィンドウ表示:DISP_WINDOW%=ON/OFFに従う) goto DISP_WIN nop rem goto DISP_WIN all rem (隠蔽モードを調べて HIDE_MODE に結果 ON/OFF を代入) :_GET_HIDE_MODE rem (最初にファイルの属性) call :_GET_ATR %THIS_FNAME% rem (最後にフォルダの属性) if exist %DISP_DIR_NAME% (call :_GET_ATR %DISP_DIR_NAME%) if exist %HIDE_DIR_NAME% (call :_GET_ATR %HIDE_DIR_NAME%) exit /b rem (属性を調べる %1=ファイル/フォルダ名) :_GET_ATR if "%1"=="" goto _GET_ATR_END set atr=%~a1 if "%atr:~3,1%"=="-" set HIDE_MODE=OFF if "%atr:~3,1%"=="h" set HIDE_MODE=ON rem 01234567890 rem "ATR"=="--ahs------" win8 rem "ATR"=="--ahs----" win7 rem echo %1 HIDE_MODE=%HIDE_MODE% rem pause :_GET_ATR_END exit /b :MENU call :_MENU goto END :SHOW call :_HIDE_OFF goto END :HIDE call :_HIDE_ON goto END rem (%1:nop, all 誤動作防止の為に何か指定すること) :DISP_WIN call :_DISP_WIN %1 goto END rem (パスワードをリセット) :_PW_RESET set PWORD=%PW_INI% call :_MAKE_HEAD_BAT exit /b rem (パスワード変更) :_PW_CHANGE echo. set old="" set /p "old=旧パスワード>" if not "%old%"=="%PWORD%" ( echo パスワードが違います goto _PW_CHANGE_END ) set /p "PWORD=新パスワード>" echo [%PWORD%] pause call :_MAKE_HEAD_BAT :_PW_CHANGE_END exit /b rem (フォルダ名変更) :_REN_DIR echo. echo 表示フォルダ名と隠しフォルダ名を同じ名前にしてもかまいません echo フォルダのアイコンは[プロパティ][カスタマイズ][アイコンの変更]で変更できます echo 表示フォルダ名=%DISP_DIR_NAME% set old_disp_name=%DISP_DIR_NAME% set /p "DISP_DIR_NAME=表示フォルダ名>" echo [%DISP_DIR_NAME%] echo 隠しフォルダ名=%HIDE_DIR_NAME% set old_hide_name=%HIDE_DIR_NAME% set /p "HIDE_DIR_NAME=隠しフォルダ名>" echo [%HIDE_DIR_NAME%] ) call :_MAKE_HEAD_BAT if %HIDE_MODE%==ON ( call :_ren %old_hide_name% %HIDE_DIR_NAME% ) else ( call :_ren %old_disp_name% %DISP_DIR_NAME% ) exit /b rem (隠蔽フォルダ内を表示 %1:all=常にウィンドウを開く, nop=指定なし) :_DISP_WIN set DIR_NAME="" if exist %DISP_DIR_NAME% set DIR_NAME=%DISP_DIR_NAME% if exist %HIDE_DIR_NAME% set DIR_NAME=%HIDE_DIR_NAME% if %HIDE_MODE%==OFF ( if %DISP_WINDOW%==OFF ( rem (表示フォルダ時にはウィンドウを開かない) if not "%1"=="all" goto _DISP_WIN_END ) ) rem (STARTではファイル名が"0000"の場合"0000.BAT"を優先実行してしまうので×) rem START "" "%DIR_NAME%" EXPLORER "%DIR_NAME%" :_DISP_WIN_END exit /b rem (隠しフォルダのままでアクセス可能にする) :_HIDE_CTRL echo. set KEY= echo パスワードを認識後、隠しフォルダのままでアクセスする設定 (%HIDE_CONTINUE%) echo 1.設定 (ON :フォルダの中を別ウィンドウで表示する) echo 2.解除 (OFF:フォルダを表示して、次回起動時に隠蔽) set/p "KEY=>" if "%KEY%"=="1" ( rem (フォルダの隠蔽を継続する) set HIDE_CONTINUE=ON goto _HIDE_CTRL_END ) if "%KEY%"=="2" ( rem (フォルダの隠蔽を継続しない) set HIDE_CONTINUE=OFF goto _HIDE_CTRL_END ) if "%KEY%"=="" (exit /b) goto _HIDE_CTRL :_HIDE_CTRL_END call :_MAKE_HEAD_BAT exit /b rem (隠しフォルダを表示にする時の別ウィンドウ表示) :_WINDOW_CTRL echo. set KEY= echo 隠しフォルダ解除時の別ウィンドウ表示 (%DISP_WINDOW%) echo 1.別ウィンドウを開く (ON) echo 2.別ウィンドウを開かない (OFF) set/p "KEY=>" if "%KEY%"=="1" ( rem (ウィンドウを開く) set DISP_WINDOW=ON goto _WINDOW_CTRL_END ) if "%KEY%"=="2" ( rem (表示フォルダ時にはウィンドウを開かない) set DISP_WINDOW=OFF goto _WINDOW_CTRL_END ) if "%KEY%"=="" (exit /b) goto _WINDOW_CTRL :_WINDOW_CTRL_END call :_MAKE_HEAD_BAT exit /b rem (フォルダ/ファイルの隠蔽を解除) :_HIDE_OFF_ALL if not exist %HIDE_DIR_NAME% ( if %HIDE_MODE%==ON ( echo ERROR [%HIDE_DIR_NAME%] がありません pause ) ) if %DISP_DIR_NAME%==%HIDE_DIR_NAME% goto _HIDE_OFF_ATR_ALL if exist %DISP_DIR_NAME% ( if %HIDE_MODE%==ON ( echo WARNING [%DISP_DIR_NAME%] が既にあります pause ) goto _HIDE_OFF_ATR_ALL ) rem (正常な状態のフォルダ) call :_ren %HIDE_DIR_NAME% %DISP_DIR_NAME% rem (関連のファイルすべてを表示) :_HIDE_OFF_ATR_ALL call :_SET_DISP_ATR exit /b rem (フォルダの隠蔽を解除) :_HIDE_OFF if %DISP_DIR_NAME%==%HIDE_DIR_NAME% goto _HIDE_OFF_ATR if exist %DISP_DIR_NAME% goto _HIDE_OFF_ATR rem (正常な状態のフォルダ) call :_ren %HIDE_DIR_NAME% %DISP_DIR_NAME% rem (関連のフォルダを表示) :_HIDE_OFF_ATR call :_SET_DISP_ATR_DIR exit /b rem (フォルダ/ファイルを隠蔽) :_HIDE_ON if %HIDE_MODE%==ON goto _HIDE_ON_END if not exist %DISP_DIR_NAME% ( echo ERROR [%DISP_DIR_NAME%] がありません pause goto _HIDE_ON_END ) if %DISP_DIR_NAME%==%HIDE_DIR_NAME% goto _HIDE_ON_ATR if exist %HIDE_DIR_NAME% ( echo WARNING [%HIDE_DIR_NAME%] が既にあります pause ) else ( call :_ren %DISP_DIR_NAME% %HIDE_DIR_NAME% ) :_HIDE_ON_ATR call :_SET_HIDE_ATR :_HIDE_ON_END exit /b rem (RENAME(ren) %1 %2 実行) :_ren rem (注:隠しファイルのままではrenに失敗する) attrib %DISP_ATR% %1 ren %1 %2 if %HIDE_MODE%==ON (attrib %HIDE_ATR% %2) exit /b rem (属性を非表示に変更) :_SET_HIDE_ATR set HIDE_MODE=ON call :_SET_ATR all %HIDE_ATR% exit /b rem (フォルダの属性を表示に変更) :_SET_DISP_ATR_DIR set HIDE_MODE=OFF call :_SET_ATR dir %DISP_ATR% exit /b rem (ファイル/フォルダの属性を表示に変更) :_SET_DISP_ATR set HIDE_MODE=OFF call :_SET_ATR all %DISP_ATR% exit /b rem(隠されているファイル/フォルダをリスト表示) :_DIR_A_H cmd /c dir /a:h exit /b rem (ファイル/フォルダの属性変更 %1:all/dir %2-%7:属性) rem (属性文字列 "+h +s" はスペースが含まれるので複数の引数として認識) :_SET_ATR set trim_arg=%2 %3 %4 %5 %6 %7 call :_TRIM set atr_arg=%trim_arg% rem ----------------------------------------------- rem HEAD_BAT (変更部分記載のファイル名) rem THIS_FNAME (このファイルの名前) rem HIDE_DIR_NAME (隠しフォルダ名) rem DISP_DIR_NAME (表示フォルダ名) rem ----------------------------------------------- if %HIDE_MODE%==ON ( if exist %HIDE_DIR_NAME% (attrib %atr_arg% %HIDE_DIR_NAME%) ) rem (表示の場合) if %HIDE_MODE%==OFF ( if exist %DISP_DIR_NAME% (attrib %atr_arg% %DISP_DIR_NAME%) rem (ミスで消えずに残っている場合) if exist %HIDE_DIR_NAME% (attrib %atr_arg% %HIDE_DIR_NAME%) ) if "%1"=="all" ( if exist %HEAD_BAT% (attrib %atr_arg% %HEAD_BAT%) if exist %THIS_FNAME% (attrib %atr_arg% %THIS_FNAME%) ) exit /b rem (ヘルプ) :_DISP_HELP call :_HELP01 pause call :_HELP02 pause exit /b :END exit /b 0 rem --sub ------------------------------------------------------------------------- rem (bat 文字列 抽出)行末の空白を削除する正攻法は、 rem %V% 変数Vの値全体 rem %V:~m% m文字目から、最後まで rem %V:~m,n% m文字目から、n文字分 rem %V:~m,-n% m文字目から、最後のn文字分を除いたもの rem %V:~-m% 後ろからm文字目から、最後まで rem %V:~-m,n% 後ろからm文字目から、n文字分 rem %V:~-m,-n% 後ろからm文字目から、最後のn文字分を除いたもの rem %V:c1=c2% 文字c1を文字c2に置換する。それぞれ複数の文字を指定することも可能 rem (文字列の前後の空白を削除 引数は trim_arg) :_TRIM call :_TRIM_END call :_TRIM_START exit /b rem (注意:文字列の前後に ", %, / 等の文字があると異常終了や誤動作になる) rem (文字列の前の空白を削除) :_TRIM_START if "%trim_arg:~0,1%"==" " ( set trim_arg=%trim_arg:~1% goto _TRIM_START ) exit /b rem (文字列の後の空白を削除) :_TRIM_END if "%trim_arg:~-1%"==" " ( set trim_arg=%trim_arg:~0,-1% goto _TRIM_END ) exit /b rem (小文字に変換) :TO_LOWER set STR=%1 for %%I in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do call set STR=%%STR:%%I=%%I%% rem for %%I in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set STR=!STR:%%I=%%I! set to_lower_arg=%STR% exit /b rem (大文字に変換) :TO_UPPER set STR=%1 for %%I in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do call set STR=%%STR:%%I=%%I%% rem for %%I in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set STR=!STR:%%I=%%I! set to_upper_arg=%STR% exit /b rem (今日の日付 %1:返値専用の変数 date_arg) :GET_DATE rem %date% rem 年=最後尾より10文字目から、4文字分 rem 月=最後尾より 5文字目から、2文字分 rem 日=最後尾より 2文字目から、2文字分 set %1=%date:~-10,4%%date:~-5,2%%date:~-2,2% exit /b rem (現在の時刻 %1:返値専用の変数 time_arg) :GET_TIME rem %time% rem (先頭に空白文字が入っている可能性があるので' 'を'0'に変換) set time2=%time: =0% set %1=%time2:~0,2%%time2:~3,2%%time2:~6,2% exit /b rem (HEAD_BAT [_0000_h.bat] ファイル作成) :_MAKE_HEAD_BAT if exist %HEAD_BAT% (attrib %DISP_ATR% %HEAD_BAT%) rem ------------------------------------ echo.>%HEAD_BAT% echo rem version=%version%>>%HEAD_BAT% echo set PWORD=%PWORD%>>%HEAD_BAT% echo set DISP_DIR_NAME=%DISP_DIR_NAME%>>%HEAD_BAT% echo set HIDE_DIR_NAME=%HIDE_DIR_NAME%>>%HEAD_BAT% echo set HIDE_CONTINUE=%HIDE_CONTINUE%>>%HEAD_BAT% echo set DISP_WINDOW=%DISP_WINDOW%>>%HEAD_BAT% echo exit /b>>%HEAD_BAT% rem ------------------------------------ if %HIDE_MODE%==ON (attrib %HIDE_ATR% %HEAD_BAT%) exit /b rem (現在の設定) :_DISP_SET echo パスワード [%PWORD%] echo 表示フォルダ名 [%DISP_DIR_NAME%] echo 隠しフォルダ名 [%HIDE_DIR_NAME%] echo 隠しフォルダのままでアクセス [%HIDE_CONTINUE%] echo 隠しフォルダを表示にする時の別ウィンドウ表示 [%DISP_WINDOW%] exit /b rem (指定の batファイル作成 %1:%CMD_BOOT%, %CMD_MENU%) :_MAKE_BAT set BAT="" call :GET_DATE date_arg call :GET_TIME time_arg if "%1"=="%CMD_BOOT%" (set BAT=%date_arg%%time_arg%.bat) if "%1"=="%CMD_MENU%" (set BAT=%MENU_BAT%) if %BAT%=="" exit /b rem ------------------------------------ echo.>%BAT% echo @echo off>>%BAT% echo.>>%BAT% echo set c_dir=>>%BAT% echo set c_drv=>>%BAT% echo.>>%BAT% rem echo echo (この %%~n0%%~x0 は隠しフォルダに移動させたままでも実行できます)>>%BAT% rem echo.>>%BAT% echo rem (同じ場所にbatがあれば実行)>>%BAT% echo if exist %THIS_FNAME% goto START>>%BAT% echo.>>%BAT% echo rem (親ディレクトリにbatがあれば実行)>>%BAT% echo if exist ..\%THIS_FNAME% (>>%BAT% echo cd ..>>%BAT% echo echo ..>>%BAT% echo goto START>>%BAT% echo )>>%BAT% echo.>>%BAT% echo rem (各ドライブのルートにbatがあれば実行)>>%BAT% echo for %%%%I in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (>>%BAT% echo rem for の中ではERRORLEVEL が変化しないので call で外に出る>>%BAT% echo call :CHK_DRV %%%%I>>%BAT% echo )>>%BAT% echo echo ファイルが見つかりません。>>%BAT% echo pause>>%BAT% echo goto END>>%BAT% echo.>>%BAT% echo.>>%BAT% echo rem (指定ドライブのチェック %%1:drive)>>%BAT% echo :CHK_DRV>>%BAT% echo dir %%1: ^>NUL 2^>NUL>>%BAT% echo if %%ERRORLEVEL%%==0 goto CHK_DRV_ON>>%BAT% echo dir %%1: /ah ^>NUL 2^>NUL>>%BAT% echo if %%ERRORLEVEL%%==0 goto CHK_DRV_ON>>%BAT% echo goto CHK_DRV_END>>%BAT% echo.>>%BAT% echo :CHK_DRV_ON>>%BAT% echo if exist %%1:\%THIS_FNAME% (>>%BAT% echo echo %%1:ドライブ>>%BAT% echo %%1:>>%BAT% echo cd \>>%BAT% echo goto START>>%BAT% echo )>>%BAT% echo.>>%BAT% echo :CHK_DRV_END>>%BAT% echo exit /b>>%BAT% echo.>>%BAT% echo.>>%BAT% echo :START>>%BAT% echo call :GET_CD c_dir>>%BAT% echo rem echo "%%c_dir%%%THIS_FNAME%" を起動>>%BAT% echo rem echo.>>%BAT% echo call %THIS_FNAME% %1>>%BAT% echo.>>%BAT% echo :END>>%BAT% echo exit>>%BAT% echo.>>%BAT% echo.>>%BAT% echo rem (パスの最後に\が無ければ追加 %%1:返値専用の変数)>>%BAT% echo :GET_CD>>%BAT% echo set arg=%%cd%%>>%BAT% echo if not "%%arg:~-1%%"=="\" (set arg=%%arg%%\)>>%BAT% echo set %%1=%%arg%%>>%BAT% echo exit /b>>%BAT% rem ------------------------------------ exit /b rem (メニュー表示) :_MENU echo. echo メニュー (Ver %version%) echo 0:現在の設定 echo 1:フォルダ/ファイルの隠蔽を解除 echo 2:フォルダ/ファイルを隠蔽 echo 3:隠蔽フォルダ内を表示 echo 4:隠されているファイル/フォルダをリスト表示 echo 5:フォルダ名変更 echo 6:パスワードを変更 echo 7:パスワードをリセット[%PW_INI%] echo 8:隠しフォルダ解除時の別ウィンドウ表示設定 echo 9:隠しフォルダのままでアクセス可能にする設定 echo b:起動BATファイル作成 echo m:メニュー専用起動BATファイル作成 echo h:ヘルプ echo x:終了 set KEY= set/p "KEY=:" if "%KEY%"=="" goto _MENU call :TO_LOWER %KEY% set KEY=%to_lower_arg% if "%KEY%"=="0" call :_DISP_SET if "%KEY%"=="1" call :_HIDE_OFF_ALL if "%KEY%"=="2" call :_HIDE_ON if "%KEY%"=="3" call :_DISP_WIN all if "%KEY%"=="4" call :_DIR_A_H if "%KEY%"=="5" call :_REN_DIR if "%KEY%"=="6" call :_PW_CHANGE if "%KEY%"=="7" call :_PW_RESET if "%KEY%"=="8" call :_WINDOW_CTRL if "%KEY%"=="9" call :_HIDE_CTRL if "%KEY%"=="b" call :_MAKE_BAT %CMD_BOOT% if "%KEY%"=="m" call :_MAKE_BAT %CMD_MENU% if "%KEY%"=="h" call :_DISP_HELP if "%KEY%"=="x" goto _MENU_END goto _MENU :_MENU_END exit /b