source: main/trunk/model-sites-dev/WaikatoEducationDept/TT4.02_Science Resources_Crates/procCrates.bat@ 33673

Last change on this file since 33673 was 33673, checked in by ak19, 4 years ago

Waikato Education Department's Science Activities and Maths Activities collections, prepared with Liang. Committing with additional READMEs that I've now written up.

File size: 11.7 KB
Line 
1@ECHO OFF
2SETLOCAL 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
9set origdir=%CD%
10
11set odir=import
12if 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!
16call :procCrate "Crates A-1.csv" "A-1" "Crate A Science - Primary"
17call :procCrate "Crates A-2.csv" "A-2" "Crate A Science - Primary"
18
19call :procCrate "Crates B-1.csv" "B-1" "Crate B Science - Primary"
20call :procCrate "Crates B-2.csv" "B-2" "Crate B Science - Primary"
21
22call :procCrate "Crates C-1.csv" "C-1" "Crate C Biology - Secondary"
23call :procCrate "Crates C-2.csv" "C-2" "Crate C Biology - Secondary"
24call :procCrate "Crates C-3.csv" "C-3" "Crate C Biology - Secondary"
25
26call :procCrate "Crates D-1.csv" "D-1" "Crate D Science - Secondary"
27call :procCrate "Crates D-2.csv" "D-2" "Crate D Science - Secondary"
28
29call :procCrate "Crates E-1.csv" "E-1" "Crate E - Generic"
30call :procCrate "Crates E-2.csv" "E-2" "Crate E - Generic"
31call :procCrate "Crates E-3.csv" "E-3" "Crate E - Generic"
32
33call :procCrate "Crates F-1.csv" "F-1" "Crate F - Chemistry"
34call :procCrate "Crates F-2.csv" "F-2" "Crate F - Chemistry"
35
36:: UNUSED
37rem call :procCrate "origcsv_Crates.csv" "A-1" "Crate A Science - Primary"
38
39
40:end
41ENDLOCAL
42GOTO :EOF
43
44
45:procCrate
46rem IF [%1]==[] (
47rem echo.
48rem echo ************************************************************************
49rem echo.
50rem echo This script must reside directly inside your TT4.02_Science Resources_Crates folder which must furthermore contain your CSV files for each crate.
51rem echo.
52rem echo Usage: %0 "csv-file" "crate" "cratename"
53rem echo Example: %0 "C:\PATH\TO\Crates (TT4.02) A-1.csv" "A-1" "Crate A Science - Primary"
54rem echo.
55rem echo ************************************************************************
56rem echo.
57rem goto end
58rem )
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
63set csvfile=%1
64set csvfile=%csvfile:"=%
65
66set crate=%2
67set crate=%crate:"=%
68
69set crateName=%3
70set crateName=%crateName:"=%
71
72echo.
73echo PROCESSING:
74echo CSVfile: %csvfile%
75echo Crate: [%crate%] --- Crate Name: %crateName%
76echo ***********
77echo.
78
79FOR /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)
173echo ********************************
174goto :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
238rem 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)
268GOTO :EOF
269
270
Note: See TracBrowser for help on using the repository browser.