Files
awesome-copilot/skills/batch-files/assets/task.txt
John Haugabook 7b9e8229fb new skill batch-files (#1435)
* new skill batch-files

* batch-files: codespell, re-run start, suggestions, txt assets

codespellrc: add FO for tasklist option

validate-readme: re-run npm start

apply suggestions from code review

batch-files: change asset templates to text files

* codespellrc: resolve spelling in comment
2026-04-28 11:29:28 +10:00

178 lines
5.8 KiB
Plaintext

@echo off
REM myTask
:: An automation script for scheduled or manual task execution.
::
:: usage: myTask [options]
:: [1] = task target or configuration value (optional)
::
:: options:
:: /? Show this help message
:: -h Show this help message
:: --help Show this help message
:: --dry Dry-run mode (preview actions without executing)
::
:: examples:
:: > myTask
:: - Run the default task.
:: > myTask --dry
:: - Preview what the task would do without making changes.
:: > myTask "C:\data\reports"
:: - Run the task against a specific target directory.
::
set "_helpLinesMyTask=20"
:: ========================================================================
:: TEMPLATE INSTRUCTIONS
:: 1. Find/Replace "myTask" with your task name (camelCase).
:: 2. Find/Replace "MyTask" with your task name (PascalCase).
:: 3. Update the help block above (lines 2-20) for your task.
:: 4. Implement your logic in :_runMyTask.
:: 5. Add any new variables to :_removeBatchVariablesMyTask.
:: ========================================================================
:: Config variables.
set "_dryRunMyTask=0"
set "_logFileMyTask=%TEMP%\%~n0.log"
:: Define paths.
set "_scriptDirMyTask=%~dp0"
set "_scriptNameMyTask=%~n0"
:: Parse arguments into variables.
set "_parOneMyTask=%~1"
set "_checkParOneMyTask=-%_parOneMyTask%-"
set "_parTwoMyTask=%~2"
set "_checkParTwoMyTask=-%_parTwoMyTask%-"
:: -----------------------------------------------------------------------
:: Handle help flag.
:: -----------------------------------------------------------------------
if "%_parOneMyTask%"=="/?" call :_showHelpMyTask & goto _removeBatchVariablesMyTask
if /i "%_parOneMyTask%"=="-h" call :_showHelpMyTask & goto _removeBatchVariablesMyTask
if /i "%_parOneMyTask%"=="--help" call :_showHelpMyTask & goto _removeBatchVariablesMyTask
:: -----------------------------------------------------------------------
:: Handle --dry flag (shift arguments if present).
:: -----------------------------------------------------------------------
if /i "%_parOneMyTask%"=="--dry" (
set "_dryRunMyTask=1"
set "_parOneMyTask=%~2"
set "_checkParOneMyTask=-%~2-"
)
:: Store current directory to return to after task completes.
set "_savedDirMyTask=%CD%"
:: Create temp directory for intermediate files.
call :_makeTempDirMyTask
:: -----------------------------------------------------------------------
:: Log start and begin execution.
:: -----------------------------------------------------------------------
call :_logMyTask "=========================================="
call :_logMyTask "Task started: %_scriptNameMyTask%"
call :_logMyTask "=========================================="
call :_runMyTask
call :_logMyTask "Task finished: %_scriptNameMyTask%"
goto _removeBatchVariablesMyTask
:: ========================================================================
:: MAIN LOGIC
:: ========================================================================
:_runMyTask
REM ===================================================================
REM TODO: Replace this section with your task logic.
REM ===================================================================
if "%_dryRunMyTask%"=="1" (
call :_logMyTask "[DRY RUN] Would process target: %_parOneMyTask%"
goto :eof
)
REM Example: Process files in a target directory.
if NOT "%_checkParOneMyTask%"=="--" (
if NOT EXIST "%_parOneMyTask%" (
call :_logMyTask "ERROR: Target not found: %_parOneMyTask%"
goto :eof
)
call :_logMyTask "Processing target: %_parOneMyTask%"
REM Add task operations here.
) else (
call :_logMyTask "Running default task (no target specified)."
REM Add default task operations here.
)
call :_logMyTask "Task operations complete."
goto :eof
:: ========================================================================
:: SUPPORT FUNCTIONS
:: ========================================================================
:_logMyTask
REM Write a timestamped message to both console and log file.
setlocal EnableDelayedExpansion
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value') do (
set "_dtMyTask=%%a"
)
set "_tsMyTask=!_dtMyTask:~0,4!-!_dtMyTask:~4,2!-!_dtMyTask:~6,2! !_dtMyTask:~8,2!:!_dtMyTask:~10,2!:!_dtMyTask:~12,2!"
echo [!_tsMyTask!] %~1
echo [!_tsMyTask!] %~1 >>"%_logFileMyTask%"
endlocal
goto :eof
:_showHelpMyTask
echo:
for /f "skip=1 tokens=* delims=" %%a in ('findstr /n "^" "%~f0"') do (
set "_line=%%a"
setlocal EnableDelayedExpansion
set "_lineNum=!_line:~0,2!"
if !_lineNum! GTR %_helpLinesMyTask% (
endlocal
goto :eof
)
set "_text=!_line:*:=!"
if defined _text (
echo !_text:~4!
) else (
echo:
)
endlocal
)
goto :eof
:_makeTempDirMyTask
set "_tmpDirMyTask=%TEMP%\%~n0"
if NOT EXIST "%_tmpDirMyTask%" (
mkdir "%_tmpDirMyTask%" >nul 2>nul
)
goto :eof
:: ========================================================================
:: CLEANUP - Remove all batch variables and restore directory.
:: ========================================================================
:_removeBatchVariablesMyTask
set _helpLinesMyTask=
set _dryRunMyTask=
set _logFileMyTask=
set _scriptDirMyTask=
set _scriptNameMyTask=
set _parOneMyTask=
set _checkParOneMyTask=
set _parTwoMyTask=
set _checkParTwoMyTask=
REM Append new variables above this line.
if EXIST "%_tmpDirMyTask%" rmdir /S /Q "%_tmpDirMyTask%" >nul 2>nul
set _tmpDirMyTask=
REM Restore original directory.
if DEFINED _savedDirMyTask (
cd /D "%_savedDirMyTask%"
set _savedDirMyTask=
)
exit /b