Setting the file. One moment.
Task · Batch Files · github/awesome-copilot · Skills Docs
ContentsBack to the top of the page Raw file
assets/ task.txt
Text · 177 lines · 6 KB
20
:: - Run the task against a specific target directory.
21 ::
22 set "_helpLinesMyTask=20"
23
24 :: ========================================================================
25 :: TEMPLATE INSTRUCTIONS
26 :: 1. Find/Replace "myTask" with your task name (camelCase).
27 :: 2. Find/Replace "MyTask" with your task name (PascalCase).
28 :: 3. Update the help block above (lines 2-20) for your task.
29 :: 4. Implement your logic in :_runMyTask.
30 :: 5. Add any new variables to :_removeBatchVariablesMyTask.
31 :: ========================================================================
32
33 :: Config variables.
34 set "_dryRunMyTask=0"
35 set "_logFileMyTask=%TEMP%\%~n0.log"
36
37 :: Define paths.
38 set "_scriptDirMyTask=%~dp0"
39 set "_scriptNameMyTask=%~n0"
40
41 :: Parse arguments into variables.
42 set "_parOneMyTask=%~1"
43 set "_checkParOneMyTask=-%_parOneMyTask%-"
44 set "_parTwoMyTask=%~2"
45 set "_checkParTwoMyTask=-%_parTwoMyTask%-"
46
47 :: -----------------------------------------------------------------------
48 :: Handle help flag.
49 :: -----------------------------------------------------------------------
50 if "%_parOneMyTask%"=="/?" call :_showHelpMyTask & goto _removeBatchVariablesMyTask
51 if /i "%_parOneMyTask%"=="-h" call :_showHelpMyTask & goto _removeBatchVariablesMyTask
52 if /i "%_parOneMyTask%"=="--help" call :_showHelpMyTask & goto _removeBatchVariablesMyTask
53
54 :: -----------------------------------------------------------------------
55 :: Handle --dry flag (shift arguments if present).
56 :: -----------------------------------------------------------------------
57 if /i "%_parOneMyTask%"=="--dry" (
58 set "_dryRunMyTask=1"
59 set "_parOneMyTask=%~2"
60 set "_checkParOneMyTask=-%~2-"
61 )
62
63 :: Store current directory to return to after task completes.
64 set "_savedDirMyTask=%CD%"
65
66 :: Create temp directory for intermediate files.
67 call :_makeTempDirMyTask
68
69 :: -----------------------------------------------------------------------
70 :: Log start and begin execution.
71 :: -----------------------------------------------------------------------
72 call :_logMyTask "=========================================="
73 call :_logMyTask "Task started: %_scriptNameMyTask%"
74 call :_logMyTask "=========================================="
75
76 call :_runMyTask
77
78 call :_logMyTask "Task finished: %_scriptNameMyTask%"
79 goto _removeBatchVariablesMyTask
80
81 :: ========================================================================
82 :: MAIN LOGIC
83 :: ========================================================================
84
85 :_runMyTask
86 REM ===================================================================
87 REM TODO: Replace this section with your task logic.
88 REM ===================================================================
89
90 if "%_dryRunMyTask%"=="1" (
91 call :_logMyTask "[DRY RUN] Would process target: %_parOneMyTask%"
92 goto :eof
93 )
94
95 REM Example: Process files in a target directory.
96 if NOT "%_checkParOneMyTask%"=="--" (
97 if NOT EXIST "%_parOneMyTask%" (
98 call :_logMyTask "ERROR: Target not found: %_parOneMyTask%"
99 goto :eof
100 )
101 call :_logMyTask "Processing target: %_parOneMyTask%"
102 REM Add task operations here.
103 ) else (
104 call :_logMyTask "Running default task (no target specified)."
105 REM Add default task operations here.
106 )
107
108 call :_logMyTask "Task operations complete."
109 goto :eof
110
111 :: ========================================================================
112 :: SUPPORT FUNCTIONS
113 :: ========================================================================
114
115 :_logMyTask
116 REM Write a timestamped message to both console and log file.
117 setlocal EnableDelayedExpansion
118 for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do (
119 set "_dtMyTask=%%a"
120 )
121 set "_tsMyTask=!_dtMyTask:~0,4!-!_dtMyTask:~4,2!-!_dtMyTask:~6,2! !_dtMyTask:~8,2!:!_dtMyTask:~10,2!:!_dtMyTask:~12,2!"
122 echo [!_tsMyTask!] %~1
123 echo [!_tsMyTask!] %~1 >>"%_logFileMyTask%"
124 endlocal
125 goto :eof
126
127 :_showHelpMyTask
128 echo:
129 for /f "skip=1 tokens=* delims=" %%a in ('findstr /n "^" "%~f0"') do (
130 set "_line=%%a"
131 setlocal EnableDelayedExpansion
132 set "_lineNum=!_line:~0,2!"
133 if !_lineNum! GTR %_helpLinesMyTask% (
134 endlocal
135 goto :eof
136 )
137 set "_text=!_line:*:=!"
138 if defined _text (
139 echo !_text:~4!
140 ) else (
141 echo:
142 )
143 endlocal
144 )
145 goto :eof
146
147 :_makeTempDirMyTask
148 set "_tmpDirMyTask=%TEMP%\%~n0"
149 if NOT EXIST "%_tmpDirMyTask%" (
150 mkdir "%_tmpDirMyTask%" >nul 2>nul
151 )
152 goto :eof
153
154 :: ========================================================================
155 :: CLEANUP - Remove all batch variables and restore directory.
156 :: ========================================================================
157 :_removeBatchVariablesMyTask
158 set _helpLinesMyTask=
159 set _dryRunMyTask=
160 set _logFileMyTask=
161 set _scriptDirMyTask=
162 set _scriptNameMyTask=
163 set _parOneMyTask=
164 set _checkParOneMyTask=
165 set _parTwoMyTask=
166 set _checkParTwoMyTask=
167 REM Append new variables above this line.
168
169 if EXIST "%_tmpDirMyTask%" rmdir /S /Q "%_tmpDirMyTask%" >nul 2>nul
170 set _tmpDirMyTask=
171
172 REM Restore original directory.
173 if DEFINED _savedDirMyTask (
174 cd /D "%_savedDirMyTask%"
175 set _savedDirMyTask=
176 )
177 exit /b