-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFile_NTFS-Compression.bat
More file actions
157 lines (144 loc) · 4.08 KB
/
Copy pathFile_NTFS-Compression.bat
File metadata and controls
157 lines (144 loc) · 4.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
@echo off
rem このバッチのヘルプはファイル末尾にあります(-h / --help または未引数で表示)
if "%~1"=="" goto :show_help
if /i "%~1"=="-h" goto :show_help
if /i "%~1"=="--help" goto :show_help
setlocal enabledelayedexpansion
:: コンソールの文字コードをShift-JIS(932)に設定
chcp 932 > nul
:: 引数があるかチェック
if "%~1"=="" (
echo 対象のファイルまたはフォルダをドラッグアンドドロップしてほしいのじゃ。
pause
exit /b
)
:: 圧縮モードか解除モードかを選択
echo 圧縮モードまたは解除モードを選択するのじゃ:
echo [1] 圧縮
echo [2] 圧縮解除
choice /C 12 /N /M "選択 (1-2): "
if %errorlevel%==1 goto COMPRESS
if %errorlevel%==2 goto DECOMPRESS
goto END
:COMPRESS
:: 圧縮レベルの選択
echo 圧縮レベルを選択するのじゃ:
echo [1] 最速 (XPRESS4K)
echo [2] 標準 (XPRESS8K)
echo [3] 最大 (XPRESS16K)
echo [4] LZX(最高圧縮)
choice /C 1234 /N /M "選択 (1-4): "
set "option="
if %errorlevel%==1 set "option=/EXE:XPRESS4K"
if %errorlevel%==2 set "option=/EXE:XPRESS8K"
if %errorlevel%==3 set "option=/EXE:XPRESS16K"
if %errorlevel%==4 set "option=/EXE:LZX"
:: 強制圧縮モードの確認
choice /C YN /N /M "強制圧縮モードを使用するか? (Y/N): "
set "force_mode=0"
if %errorlevel%==1 set "force_mode=1"
:: 除外拡張子の入力
echo.
echo 除外したい拡張子があればスペース区切りで入力するのじゃ。(例: .zip .mp4 .jpg)
echo 特に除外しない場合は、何も入力せずにEnterを押すがよい。
set "exclude_exts="
set /P "exclude_exts=> "
:: 圧縮処理
echo.
if "!exclude_exts!"=="" (
if %force_mode%==1 (
echo 強制圧縮中(%option% /F)...
for %%G in (%*) do (
echo - "%%~G"
if exist "%%~G\" (
rem フォルダの場合
compact /C %option% /F /S:"%%~G"
) else (
rem ファイルの場合
compact /C %option% /F "%%~G"
)
)
) else (
echo 圧縮中(%option%)...
for %%G in (%*) do (
echo - "%%~G"
if exist "%%~G\" (
rem フォルダの場合
compact /C %option% /S:"%%~G"
) else (
rem ファイルの場合
compact /C %option% "%%~G"
)
)
)
) else (
set "f_opt="
if !force_mode!==1 set "f_opt=/F"
echo 除外拡張子「!exclude_exts!」を適用して圧縮中(!option! !f_opt!)なのじゃ...
for %%G in (%*) do (
if exist "%%~G\" (
rem フォルダの場合
echo - フォルダを解析中: "%%~G"
for /f "delims=" %%F in ('dir /b /s /a:-d "%%~G"') do (
set "skip=0"
for %%E in (!exclude_exts!) do (
if /i "%%~xF"=="%%E" set "skip=1"
)
if "!skip!"=="0" (
compact /C !option! !f_opt! "%%F" >nul
) else (
echo [スキップ] "%%F"
)
)
) else (
rem ファイルの場合
set "skip=0"
for %%E in (!exclude_exts!) do (
if /i "%%~xG"=="%%E" set "skip=1"
)
if "!skip!"=="0" (
compact /C !option! !f_opt! "%%~G"
) else (
echo - [スキップ] "%%~G"
)
)
)
)
goto END
:DECOMPRESS
:: 圧縮解除処理
echo.
echo 圧縮解除中なのじゃ...
for %%G in (%*) do (
echo - "%%~G"
if exist "%%~G\" (
rem フォルダの場合
compact /U /S:"%%~G"
) else (
rem ファイルの場合
compact /U "%%~G"
)
)
goto END
:END
echo.
echo 全ての処理が完了したのじゃ。
endlocal
pause
exit /b
:show_help
echo.
echo [概要]
echo NTFS 圧縮/圧縮解除をファイルやフォルダに対して実行するのじゃ。
echo 特定の拡張子を除外して圧縮することもできるぞ。
echo.
echo [使い方]
echo %~nx0 ^<file_or_folder1^> ^<file_or_folder2^> ...
echo 対話で 圧縮/解除、圧縮レベル、強制の有無、除外拡張子 を選択するのじゃ。
echo.
echo [注意]
echo システムファイルや既に圧縮されたファイルには効果が限定的じゃぞ。
echo.
echo 何かキーを押すと閉じるのじゃ...
pause
exit /b