User Tools

Site Tools


windows_batch_scripting

Windows Batch Scripting

The Wikibook

Tricks

How to find if a string is in a list of strings in a DOS batch file

from http://stackoverflow.com/questions/11235153/how-to-find-if-a-string-is-in-a-list-of-strings-in-a-dos-batch-file

setlocal EnableDelayedExpansion

set arg[1]=validArgument1
set arg[2]=validArgument2
set arg[3]=validArgument3

for /L %%i in (1,1,3) do if /I "%1" equ "!arg[%%i]!" SET "ARG=!arg[%%i]!"

Escape an exclamation mark when EnableDelayedExpansion is active

from http://stackoverflow.com/questions/3288552/how-can-i-escape-an-exclamation-mark-in-cmd-scripts

@echo off
setlocal ENABLEDELAYEDEXPANSION
echo I want to go out with a bang^^!

Normally the ^^! works, but in quotes you only need ^! instead.

echo I want to go out with a bang^^!
echo He said "Bang^!"

This is a result of the escape mechanism of the batch parser.

First the parser parses a line and the caret escapes the next character, in this case it has an effect for &|<>()“<linefeed>, but only outside of quotes, as inside of the quotes all characters are “normal” and the caret itself has no effect.

With delayed expansion an extra parse step follows, there is the caret also an escape character for the next character, but only affects the ! and ^, and quotes are ignored in this parsing step. This extra step will be executed only, if there is at least one ! in the line.

More examples

Check if the current batch script has admin rights

from http://stackoverflow.com/questions/4051883/batch-script-how-to-check-for-admin-rights

@echo off
goto check_Permissions

:check_Permissions
    echo Administrative permissions required. Detecting permissions...

    net session >nul 2>&1
    if %errorLevel% == 0 (
        echo Success: Administrative permissions confirmed.
    ) else (
        echo Failure: Current permissions inadequate.
    )

    pause >nul

Get current time in a locale independent way

from http://serverfault.com/questions/227345/locale-unaware-date-and-time-in-batch-files

FOR /f %%a in ('WMIC OS GET LocalDateTime ^| find "."') DO set DTS=%%a
set CUR_DATE=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%

Delete folders older than 10 days

from http://stackoverflow.com/questions/5497211/batch-file-to-delete-folders-older-than-10-days-in-windows-7

FORFILES /S /D -10 /C "cmd /c IF @isdir == TRUE rd /S /Q @path"
windows_batch_scripting.txt · Last modified: by zertrin