1 | @ECHO OFF
|
---|
2 | SETLOCAL enabledelayedexpansion
|
---|
3 |
|
---|
4 | :: THIS SCRIPT FILE NEEDS TO BE IN ASCII FOR THE CHARACTER REPLACEMENTS TO WORK
|
---|
5 | :: If working with utf8 chars to be replaced, set this script file to be in utf-8 and change the codepage, see
|
---|
6 | :: https://stackoverflow.com/questions/5273937/how-to-replace-substrings-in-windows-batch-file
|
---|
7 | ::chcp 65001
|
---|
8 |
|
---|
9 | set origdir=%CD%
|
---|
10 |
|
---|
11 | set odir=import
|
---|
12 | if not exist %odir% mkdir %odir%
|
---|
13 |
|
---|
14 |
|
---|
15 | :: Process each CSV file. Each CSV file is assumed by procCrate to be in ASCII not UTF-8!
|
---|
16 | call :procCrate "Crates A-1.csv" "A-1" "Crate A Science - Primary"
|
---|
17 | call :procCrate "Crates A-2.csv" "A-2" "Crate A Science - Primary"
|
---|
18 |
|
---|
19 | call :procCrate "Crates B-1.csv" "B-1" "Crate B Science - Primary"
|
---|
20 | call :procCrate "Crates B-2.csv" "B-2" "Crate B Science - Primary"
|
---|
21 |
|
---|
22 | call :procCrate "Crates C-1.csv" "C-1" "Crate C Biology - Secondary"
|
---|
23 | call :procCrate "Crates C-2.csv" "C-2" "Crate C Biology - Secondary"
|
---|
24 | call :procCrate "Crates C-3.csv" "C-3" "Crate C Biology - Secondary"
|
---|
25 |
|
---|
26 | call :procCrate "Crates D-1.csv" "D-1" "Crate D Science - Secondary"
|
---|
27 | call :procCrate "Crates D-2.csv" "D-2" "Crate D Science - Secondary"
|
---|
28 |
|
---|
29 | call :procCrate "Crates E-1.csv" "E-1" "Crate E - Generic"
|
---|
30 | call :procCrate "Crates E-2.csv" "E-2" "Crate E - Generic"
|
---|
31 | call :procCrate "Crates E-3.csv" "E-3" "Crate E - Generic"
|
---|
32 |
|
---|
33 | call :procCrate "Crates F-1.csv" "F-1" "Crate F - Chemistry"
|
---|
34 | call :procCrate "Crates F-2.csv" "F-2" "Crate F - Chemistry"
|
---|
35 |
|
---|
36 | :: UNUSED
|
---|
37 | rem call :procCrate "origcsv_Crates.csv" "A-1" "Crate A Science - Primary"
|
---|
38 |
|
---|
39 |
|
---|
40 | :end
|
---|
41 | ENDLOCAL
|
---|
42 | GOTO :EOF
|
---|
43 |
|
---|
44 |
|
---|
45 | :procCrate
|
---|
46 | rem IF [%1]==[] (
|
---|
47 | rem echo.
|
---|
48 | rem echo ************************************************************************
|
---|
49 | rem echo.
|
---|
50 | rem echo This script must reside directly inside your TT4.02_Science Resources_Crates folder which must furthermore contain your CSV files for each crate.
|
---|
51 | rem echo.
|
---|
52 | rem echo Usage: %0 "csv-file" "crate" "cratename"
|
---|
53 | rem echo Example: %0 "C:\PATH\TO\Crates (TT4.02) A-1.csv" "A-1" "Crate A Science - Primary"
|
---|
54 | rem echo.
|
---|
55 | rem echo ************************************************************************
|
---|
56 | rem echo.
|
---|
57 | rem goto end
|
---|
58 | rem )
|
---|
59 |
|
---|
60 |
|
---|
61 | :: store params stripped of any double quotes
|
---|
62 | :: https://stackoverflow.com/questions/1964192/removing-double-quotes-from-variables-in-batch-file-creates-problems-with-cmd-en
|
---|
63 | set csvfile=%1
|
---|
64 | set csvfile=%csvfile:"=%
|
---|
65 |
|
---|
66 | set crate=%2
|
---|
67 | set crate=%crate:"=%
|
---|
68 |
|
---|
69 | set crateName=%3
|
---|
70 | set crateName=%crateName:"=%
|
---|
71 |
|
---|
72 | echo.
|
---|
73 | echo PROCESSING:
|
---|
74 | echo CSVfile: %csvfile%
|
---|
75 | echo Crate: [%crate%] --- Crate Name: %crateName%
|
---|
76 | echo ***********
|
---|
77 | echo.
|
---|
78 |
|
---|
79 | FOR /F "usebackq tokens=1,2 delims=," %%G in ("%csvfile%") do (
|
---|
80 |
|
---|
81 | rem echo %%G
|
---|
82 | rem echo(%%H
|
---|
83 |
|
---|
84 | :: skip rows in the CSV file that aren't of the form: activity,activityName
|
---|
85 | rem https://stackoverflow.com/questions/36355490/continue-equivalent-command-in-nested-loop-in-windows-batch
|
---|
86 | :: only if we have an activityName column for this row, do we process this row
|
---|
87 | if [%%H]==[] (
|
---|
88 | echo ^(not an activity row^)
|
---|
89 | ) else (
|
---|
90 | set activity=%%G
|
---|
91 |
|
---|
92 | rem set activity=%activity:"=%
|
---|
93 |
|
---|
94 | rem set activityName=%%H inside for loop will leave activityName empty without doing setlocal enabledelayedexpansion above
|
---|
95 | rem https://stackoverflow.com/questions/23525681/how-to-print-variable-inside-loop-in-batch-script
|
---|
96 | rem Didn't seem to make a difference for me: https://stackoverflow.com/questions/4333754/problem-with-search-and-replace-batch-file
|
---|
97 |
|
---|
98 |
|
---|
99 | set activityName=%%H
|
---|
100 |
|
---|
101 | rem echo Activity Name (before cleaning): !activityName!
|
---|
102 |
|
---|
103 | rem clean the activity name to deal with ampersands, and the stylised double quotes, hyphens and ellipses,
|
---|
104 | rem single quotes, and any others (e.g. 3/4 fraction) that change in Notepad++'s Encoding > Encode in UTF-8 file-view
|
---|
105 | set activityName=!activityName:
|
---|
106 | =...!
|
---|
107 | set activityName=!activityName:=-!
|
---|
108 | set activityName=!activityName:^&=and!
|
---|
109 | set activityName=!activityName:/=;!
|
---|
110 | rem finally, remove the regular double quotes around parameter before converting stylised double quotes to ASCII double quotes
|
---|
111 | REM set activityName=!activityName:"=!
|
---|
112 | set activityName=!activityName:="!
|
---|
113 | set activityName=!activityName:="!
|
---|
114 | set activityName=!activityName:='!
|
---|
115 | set activityName=!activityName:='!
|
---|
116 | set activityName=!activityName:Ÿ=3/4!
|
---|
117 |
|
---|
118 | echo Activity: [!activity!] --- ^(cleaned^) Activity Name: [!activityName!]
|
---|
119 |
|
---|
120 | if not exist %odir%\%crate% mkdir %odir%\%crate%
|
---|
121 | pushd %odir%\%crate%
|
---|
122 |
|
---|
123 | rem NOTE: setdelayedexpansion to use exclamation marks requires double caret escaping to echo the exclamation mark
|
---|
124 | echo ^<?xml version="1.0" encoding="UTF-8"?^> > metadata.xml
|
---|
125 | echo ^<^^!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd"^> >> metadata.xml
|
---|
126 | echo ^<DirectoryMetadata^> >> metadata.xml
|
---|
127 | echo ^<FileSet^> >> metadata.xml
|
---|
128 | echo ^<FileName^>.*^</FileName^> >> metadata.xml
|
---|
129 | echo ^<Description^> >> metadata.xml
|
---|
130 | echo ^<Metadata mode="accumulate" name="er.Crate"^>%crate%^</Metadata^> >> metadata.xml
|
---|
131 | echo ^<Metadata mode="accumulate" name="er.CrateName"^>%crateName%^</Metadata^> >> metadata.xml
|
---|
132 | echo ^</Description^> >> metadata.xml
|
---|
133 | echo ^</FileSet^> >> metadata.xml
|
---|
134 | echo ^</DirectoryMetadata^> >> metadata.xml
|
---|
135 |
|
---|
136 | popd
|
---|
137 |
|
---|
138 | if not exist %odir%\%crate%\!activity! mkdir %odir%\%crate%\!activity!
|
---|
139 | pushd %odir%\%crate%\!activity!
|
---|
140 |
|
---|
141 | echo ^<?xml version="1.0" encoding="UTF-8"?^> > metadata.xml
|
---|
142 | echo ^<^^!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd"^> >> metadata.xml
|
---|
143 | echo ^<DirectoryMetadata^> >> metadata.xml
|
---|
144 | echo ^<FileSet^> >> metadata.xml
|
---|
145 | echo ^<FileName^>.*^</FileName^> >> metadata.xml
|
---|
146 | echo ^<Description^> >> metadata.xml
|
---|
147 | rem Crate|Activity
|
---|
148 | rem echo ^<Metadata mode="accumulate" name="er.CrateHierarchy"^>%crate%^|!activity!^</Metadata^> >> metadata.xml
|
---|
149 | rem Crate: CrateName|Activity: ActivityName
|
---|
150 | echo ^<Metadata mode="accumulate" name="er.CrateHierarchy"^>%crate%: %crateName%^|!activity!: !activityName!^</Metadata^> >> metadata.xml
|
---|
151 | echo ^<Metadata mode="accumulate" name="er.Activity"^>!activity!^</Metadata^> >> metadata.xml
|
---|
152 | echo ^<Metadata mode="accumulate" name="er.ActivityName"^>!activityName!^</Metadata^> >> metadata.xml
|
---|
153 | echo ^</Description^> >> metadata.xml
|
---|
154 | echo ^</FileSet^> >> metadata.xml
|
---|
155 | echo ^</DirectoryMetadata^> >> metadata.xml
|
---|
156 |
|
---|
157 | if exist "%origdir%\Crate %crate%\!activity!*" copy "%origdir%\Crate %crate%\!activity!.*" .
|
---|
158 | if exist "%origdir%\Crate %crate%\!activity!_*" copy "%origdir%\Crate %crate%\!activity!_*" .
|
---|
159 | if exist "%origdir%\Crate %crate%\!activity!-*" copy "%origdir%\Crate %crate%\!activity!-*" .
|
---|
160 | if exist "%origdir%\Crate %crate%\!activity!^(*" copy "%origdir%\Crate %crate%\!activity!^(*" .
|
---|
161 |
|
---|
162 | if exist "%origdir%\Crate %crate%\Extra*" copy "%origdir%\Crate %crate%\Extra*" ..\.
|
---|
163 |
|
---|
164 | rem check for dir https://stackoverflow.com/questions/138981/how-to-test-if-a-file-is-a-directory-in-a-batch-script
|
---|
165 | rem xcopy for recursively copying dirs: https://stackoverflow.com/questions/13314433/batch-file-to-copy-directories-recursively
|
---|
166 | rem For loop to call xcopy on file glob *directory* name match https://ss64.com/nt/for.html
|
---|
167 | rem For each source directory of files, copy it into the destination too
|
---|
168 | FOR /D %%G IN ("%origdir%\Crate %crate%\!activity!*") do (xcopy "%%G" . /s /e /i)
|
---|
169 | popd
|
---|
170 |
|
---|
171 | )
|
---|
172 | )
|
---|
173 | echo ********************************
|
---|
174 | goto :eof
|
---|
175 |
|
---|
176 | :: UNUSED
|
---|
177 | :skipLine
|
---|
178 | echo ^(not a row^)
|
---|
179 | goto :eof
|
---|
180 |
|
---|
181 | :: UNUSED Call procLine with double-quoted %%G/activity and %%H/activityName (first 2 columns of csv files)
|
---|
182 | :procLine
|
---|
183 | set activity=%1
|
---|
184 | set activity=%activity:"=%
|
---|
185 |
|
---|
186 | :: set activityName=%%H inside for loop will leave activityName empty without doing setlocal enabledelayedexpansion above
|
---|
187 | :: https://stackoverflow.com/questions/23525681/how-to-print-variable-inside-loop-in-batch-script
|
---|
188 | :: Didn't seem to make a difference for me: https://stackoverflow.com/questions/4333754/problem-with-search-and-replace-batch-file
|
---|
189 |
|
---|
190 |
|
---|
191 | set activityName=%2
|
---|
192 |
|
---|
193 | rem echo Activity Name (before cleaning): !activityName!
|
---|
194 |
|
---|
195 | :: clean the activity name to deal with ampersands, and the stylised double quotes, hyphens and ellipses, etc.
|
---|
196 | set activityName=!activityName:
|
---|
197 | =...!
|
---|
198 | set activityName=!activityName:=-!
|
---|
199 | set activityName=!activityName:='!
|
---|
200 | set activityName=!activityName:='!
|
---|
201 | set activityName=!activityName:Ÿ=3/4!
|
---|
202 | set activityName=!activityName:^&=and!
|
---|
203 | rem finally, remove the regular double quotes around parameter before converting stylised double quotes to ASCII double quotes
|
---|
204 | set activityName=!activityName:"=!
|
---|
205 | set activityName=!activityName:="!
|
---|
206 | set activityName=!activityName:="!
|
---|
207 |
|
---|
208 | echo Activity: [!activity!] --- (cleaned) Activity Name: [!activityName!]
|
---|
209 |
|
---|
210 |
|
---|
211 | if not exist %odir%\%crate% mkdir %odir%\%crate%
|
---|
212 | pushd %odir%\%crate%
|
---|
213 |
|
---|
214 | echo ^<?xml version="1.0" encoding="UTF-8"?^> > metadata.xml
|
---|
215 | echo ^<!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd"^> >> metadata.xml
|
---|
216 | echo ^<DirectoryMetadata^> >> metadata.xml
|
---|
217 | echo ^<FileSet^> >> metadata.xml
|
---|
218 | echo ^<FileName^>.*^</FileName^> >> metadata.xml
|
---|
219 | echo ^<Description^> >> metadata.xml
|
---|
220 | echo ^<Metadata mode="accumulate" name="er.Crate"^>%crate%^</Metadata^> >> metadata.xml
|
---|
221 | echo ^<Metadata mode="accumulate" name="er.CrateName"^>%crateName%^</Metadata^> >> metadata.xml
|
---|
222 | echo ^</Description^> >> metadata.xml
|
---|
223 | echo ^</FileSet^> >> metadata.xml
|
---|
224 | echo ^</DirectoryMetadata^> >> metadata.xml
|
---|
225 |
|
---|
226 | popd
|
---|
227 |
|
---|
228 | if not exist %odir%\%crate%\!activity! mkdir %odir%\%crate%\!activity!
|
---|
229 | pushd %odir%\%crate%\!activity!
|
---|
230 |
|
---|
231 | echo ^<?xml version="1.0" encoding="UTF-8"?^> > metadata.xml
|
---|
232 | echo ^<!DOCTYPE DirectoryMetadata SYSTEM "http://greenstone.org/dtd/DirectoryMetadata/1.0/DirectoryMetadata.dtd"^> >> metadata.xml
|
---|
233 | echo ^<DirectoryMetadata^> >> metadata.xml
|
---|
234 | echo ^<FileSet^> >> metadata.xml
|
---|
235 | echo ^<FileName^>.*^</FileName^> >> metadata.xml
|
---|
236 | echo ^<Description^> >> metadata.xml
|
---|
237 | :: Crate|Activity
|
---|
238 | rem echo ^<Metadata mode="accumulate" name="er.CrateHierarchy"^>%crate%^|!activity!^</Metadata^> >> metadata.xml
|
---|
239 | :: Crate: CrateName|Activity: ActivityName
|
---|
240 | echo ^<Metadata mode="accumulate" name="er.CrateHierarchy"^>%crate%: %crateName%^|!activity!: !activityName!^</Metadata^> >> metadata.xml
|
---|
241 | echo ^<Metadata mode="accumulate" name="er.Activity"^>!activity!^</Metadata^> >> metadata.xml
|
---|
242 | echo ^<Metadata mode="accumulate" name="er.ActivityName"^>!activityName!^</Metadata^> >> metadata.xml
|
---|
243 | echo ^</Description^> >> metadata.xml
|
---|
244 | echo ^</FileSet^> >> metadata.xml
|
---|
245 | echo ^</DirectoryMetadata^> >> metadata.xml
|
---|
246 |
|
---|
247 |
|
---|
248 | if exist "%origdir%\Crate %crate%\!activity!*" copy "%origdir%\Crate %crate%\!activity!.*" .
|
---|
249 | if exist "%origdir%\Crate %crate%\!activity!_*" copy "%origdir%\Crate %crate%\!activity!_*" .
|
---|
250 | if exist "%origdir%\Crate %crate%\!activity!-*" copy "%origdir%\Crate %crate%\!activity!-*" .
|
---|
251 | if exist "%origdir%\Crate %crate%\!activity!^(*" copy "%origdir%\Crate %crate%\!activity!^(*" .
|
---|
252 |
|
---|
253 | if exist "%origdir%\Crate %crate%\Extra*" copy "%origdir%\Crate %crate%\Extra*" ..\.
|
---|
254 |
|
---|
255 | rem https://stackoverflow.com/questions/138981/how-to-test-if-a-file-is-a-directory-in-a-batch-script
|
---|
256 | rem https://stackoverflow.com/questions/13314433/batch-file-to-copy-directories-recursively
|
---|
257 | rem if exist "%origdir%\Crate %crate%\!activity!*\NUL" xcopy "%origdir%\Crate %crate%\!activity!*" . /s /e /i
|
---|
258 | rem For folders of docs for an activity, the following XXcreates a target subfolder named activity and into it,XX copies the files from the source folder
|
---|
259 | rem https://ss64.com/nt/for.html
|
---|
260 | for /D %%G in ("%origdir%\Crate %crate%\!activity!*") do (xcopy "%%G" . /s /e /i)
|
---|
261 |
|
---|
262 |
|
---|
263 | ::if exist "%origdir%\Crate %crate%\Extra*" copy "%origdir%\Crate %crate%\Extra*" .\..
|
---|
264 | popd
|
---|
265 | endlocal
|
---|
266 |
|
---|
267 | )
|
---|
268 | GOTO :EOF
|
---|
269 |
|
---|
270 |
|
---|