-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmaterial-folders.bat
More file actions
235 lines (190 loc) · 6.18 KB
/
material-folders.bat
File metadata and controls
235 lines (190 loc) · 6.18 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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
@PUSHD "%~dp0"
@TITLE Material Folders
@CHCP 65001 >NUL
@VERIFY ON
@ECHO OFF
@SETLOCAL ENABLEDELAYEDEXPANSION
:UI
:: Options - Edit ONLY this to register more icon names
SET SELECT@1=material
SET SELECT@2=material-open
SET SELECT@3=vscode
SET SELECT@4=vscode-open
SET CURSOR=1
SET MAX=0
FOR /F "TOKENS=1DELIMS==" %%1 IN ('SET SELECT@ 2^>NUL') DO SET /A MAX+=1
ECHO.
:RE
FOR /F "TOKENS=1DELIMS==" %%1 IN ('SET CURSOR@ 2^>NUL') DO SET %%1=
SET CURSOR@!CURSOR!=^^^<
ECHO.[sSelect a Theme:
ECHO.
ECHO.- - - - -
FOR /L %%I IN (1, 1, !MAX!) DO ECHO.%%I. !SELECT@%%I! !CURSOR@%%I!
ECHO.- - - - -
ECHO.
ECHO.Navigate with W and S, or with numbers.
ECHO.Press ENTER or SPACE to confirm.[u[1A
CALL :CHOICE
IF %CHOICE.INPUT%.==. GOTO :NEXT
IF /I %CHOICE.INPUT%==SPACE GOTO :NEXT
IF /I %CHOICE.INPUT%==S IF NOT !CURSOR! GEQ !MAX! SET /A CURSOR+=1
IF /I %CHOICE.INPUT%==W IF NOT !CURSOR! LEQ 1 SET /A CURSOR-=1
FOR /L %%I IN (1, 1, !MAX!) DO IF /I %CHOICE.INPUT%==%%I SET CURSOR=%%I
GOTO :RE
:NEXT
SET "ICONS=%LOCALAPPDATA%\Material-Icons\!SELECT@%CURSOR%!"
SET THEME=!SELECT@%CURSOR%!
FOR /F "TOKENS=1DELIMS==" %%1 IN ('SET SELECT@ 2^>NUL') DO SET %%1=
SET CURSOR=1
SET SELECT@1=Confirm
SET SELECT@2=Cancel
SET MAX=0
FOR /F "DELIMS=" %%1 IN ('SET SELECT@ 2^>NUL') DO SET /A MAX+=1
CLS
ECHO.
:RE-CONFIRM
FOR /F "TOKENS=1DELIMS==" %%1 IN ('SET CURSOR@ 2^>NUL') DO SET %%1=
SET CURSOR@!CURSOR!=^^^<
ECHO.[sConfirm to update the icons of all folders and subfolders inside the following directory^?
ECHO.^>^> %CD%
ECHO.
ECHO.- - - - -
FOR /L %%I IN (1, 1, !MAX!) DO ECHO.%%I. !SELECT@%%I! !CURSOR@%%I!
ECHO.- - - - -
ECHO.
ECHO.Navigate with W and S, or with numbers.
ECHO.Press ENTER or SPACE to confirm.[u[1A
CALL :CHOICE
IF %CHOICE.INPUT%.==. IF !SELECT@%CURSOR%!==Cancel (EXIT 0) ELSE IF !SELECT@%CURSOR%!==Confirm GOTO :CHANGE-ALL
IF /I %CHOICE.INPUT%==SPACE IF !SELECT@%CURSOR%!==Cancel (EXIT 0) ELSE IF !SELECT@%CURSOR%!==Confirm GOTO :CHANGE-ALL
IF /I %CHOICE.INPUT%==S IF NOT !CURSOR! GEQ !MAX! SET /A CURSOR+=1
IF /I %CHOICE.INPUT%==W IF NOT !CURSOR! LEQ 1 SET /A CURSOR-=1
FOR /L %%I IN (1, 1, !MAX!) DO IF /I %CHOICE.INPUT%==%%I SET CURSOR=%%I
GOTO :RE-CONFIRM
:CHANGE-ALL
CLS
:: Go through all folders
ECHO.Listing folders...
ECHO.
FOR /F "TOKENS=*DELIMS=" %%I IN ('DIR /S /A:D /B ^| findstr /I /V /C:"\\." /C:"\\node_modules\\"') DO CALL :PROC "%%I"
FOR /F "TOKENS=*DELIMS=" %%I IN ('DIR /A:D /B ^| findstr /I /C:"\."') DO CALL :PROC "%%I"
EXIT /B 0
:PROC
SET "FPATH=%~1\desktop.ini"
FOR %%I IN ("!FPATH!") DO SET "FILE=%%~nI"
FOR %%I IN ("!FPATH!") DO SET "DIRECTORY=%%~dpI"
FOR %%I IN ("!DIRECTORY:~0,-1!") DO SET "DIRNAME=%%~nxI"
SET ICONNAME=!DIRNAME!
IF "!ICONNAME:~0,1!"=="." SET ICONNAME=!ICONNAME:~1!
SET ICONNAME_S=!ICONNAME:~0,-1!
:: Icon Setup
IF NOT EXIST "!ICONS!" MD "!ICONS!"
IF NOT EXIST "!ICONS!\folder-!ICONNAME!.ico" (
CURL --fail --ssl-no-revoke "https://raw.githubusercontent.com/136MasterNR/Material-Folders/main/icons/!THEME!/folder-!ICONNAME!.ico" 2>NUL >"!ICONS!\folder-!ICONNAME!.ico"
FOR /F %%I IN ("!ICONS!\folder-!ICONNAME!.ico") DO IF %%~zI EQU 0 (
DEL /Q "!ICONS!\folder-!ICONNAME!.ico"
IF NOT EXIST "!ICONS!\folder-!ICONNAME_S!.ico" (
CURL --fail --ssl-no-revoke "https://raw.githubusercontent.com/136MasterNR/Material-Folders/main/icons/!THEME!/folder-!ICONNAME_S!.ico" 2>NUL >"!ICONS!\folder-!ICONNAME_S!.ico"
FOR /F %%I IN ("!ICONS!\folder-!ICONNAME_S!.ico") DO IF %%~zI EQU 0 (
DEL /Q "!ICONS!\folder-!ICONNAME_S!.ico"
EXIT /B 1
)
)
SET ICONNAME=!ICONNAME:~0,-1!
)
)
:: Read
IF NOT EXIST "!FPATH!" (
(
ECHO.[.ShellClassInfo]
ECHO.[ViewState]
ECHO.Mode=
ECHO.Vid=
ECHO.FolderType=Generic
)>"!FPATH!" && attrib +s +h "!FPATH!"
)
CALL :read "!FILE!" "!DIRECTORY!"
:: Change something in the ini - "test" is the file name
FOR /F "TOKENS=1DELIMS==" %%1 IN ('SET desktop:IconResource+AD0-C[') DO SET "%%1="
SET ShellIconInfo=!ICONS!\folder-!ICONNAME!.ico,0
SET "desktop:.ShellClassInfo[IconResource]=!ShellIconInfo!"
SET "desktop:IconResource+AD0-C[!ShellIconInfo:\=+AFw-!]=$_S"
:: Updates the ini file
CALL :write "!FILE!" "!DIRECTORY!"
attrib +r "!DIRECTORY:~0,-1!"
EXIT /B 0
:read
SET FILE=%1
SET FILE=!FILE:"=!
SET FPATH=%2
SET FPATH=!FPATH:"=!
SET CATEGORY=
FOR /F "TOKENS=1,2,*DELIMS=]=" %%1 IN ('TYPE "!FPATH!!FILE!.ini"') DO (
SET ITEM=%%1
IF "!ITEM:~0,1!"=="[" (
SET CATEGORY=!ITEM:[=!
) ELSE (
IF "%%2 %%3"==" " (
SET !FILE!:!CATEGORY![%%1]=$_S
) ELSE SET !FILE!:!CATEGORY![%%1]=%%2 %%3
)
)
SET ITEM=
EXIT /B 0
:write
SET FILE=%1
SET FILE=!FILE:"=!
SET FPATH=%2
SET FPATH=!FPATH:"=!
SET CATEGORY=
BREAK>"!FPATH!!FILE!.inibuild"
FOR /F "TOKENS=1,2,*DELIMS=:[=" %%1 IN ('SET !FILE!:') DO (
SET ITEM=%%3
SET ITEM=!ITEM:$_S=!
IF NOT "%%2"=="!CATEGORY!" (
SET CATEGORY=%%2
ECHO;[!CATEGORY!]>> "!FPATH!!FILE!.inibuild"
ECHO;!ITEM:]=!>> "!FPATH!!FILE!.inibuild"
) ELSE ECHO;!ITEM:]=!>> "!FPATH!!FILE!.inibuild"
)
attrib -s -h "!FPATH!!FILE!.ini"
>NUL MOVE "!FPATH!!FILE!.inibuild" "!FPATH!!FILE!.ini" && (
attrib +s +h "!FPATH!!FILE!.ini"
ECHO.Updated !FPATH!
)
EXIT /B 0
:CHOICE
REM : Special thanks to Grub4K for the xcopy input method! (https://gist.github.com/Grub4K/2d3f5875c488164b44454cbf37deae80)
SETLOCAL ENABLEDELAYEDEXPANSION
SET "KEY="
::Set timeout if /t used
IF /I "%1."=="/T." START "CHOICE_AUTO_SKIP" /MIN CMD /C TIMEOUT /T %2^&TASKKILL /IM xcopy.exe /F
::Get user input - provided by Grub4K
FOR /F "DELIMS=" %%A IN ('XCOPY /W "!COMSPEC!" "!COMSPEC!" 2^>NUL ^|^| ECHO.TIMEOUT') DO (
IF NOT DEFINED KEY SET "KEY=%%A^!"
)
IF !KEY:~-1!==^^ (
::Escape the escape character, "caret"
SET "KEY=CARET"
) ELSE IF "!KEY:~-2!"=="&^!" (
::Escape the seperator character, "and"
SET "KEY=AND"
) ELSE IF "!KEY:~-8,7!."=="TIMEOUT." (
::If /T is used and times out, return it
SET KEY=TIMEOUT
) ELSE (
::Take out the key from the xcopy message
SET "KEY=!KEY:~-2,1!"
)
IF /I "%1."=="/T." TASKKILL /FI "WINDOWTITLE eq CHOICE_AUTO_SKIP*" /IM cmd.exe 1>NUL
::Make key returns more understandable
IF NOT DEFINED KEY SET KEY=BLANK
IF "!KEY!"==" " SET KEY=SPACE
IF "!KEY!"==" " SET KEY=TAB
IF "!KEY!"=="," SET KEY=COMMA
IF "!KEY!"=="=" SET KEY=EQUAL
IF "!KEY!"=="" SET KEY=ENTER
::Pass the key variable outside the current local enviroment
ENDLOCAL&SET CHOICE.INPUT=%KEY%
EXIT /B