3

I was just wondering what the "~" symbol does in a batch file, I know that it's associated with variables.

Can I have some examples of what it does?

Thanks.

  • 1
    Read the documentation. Look at the bottom of the help for both FOR and CALL. From the command line, type, `HELP CALL` and `HELP FOR`, or `CALL /?` AND `FOR /?`. – dbenham Oct 24 '14 at 00:37

2 Answers2

4

It depends on the command on which ~ is used as dbenham and Magoo already wrote. In general it means: Get the value of a variable (loop or environment variable) or an argument string passed to the batch file with a modification.

A very simple example:

There is a batch file test.bat with content:

@echo Parameter 1 as specified: %1
@echo Parameter 1 (no quotes):  %~1

which is started with

test.bat "C:\Program Files\Internet Explorer\iexplore.exe"

The double quotes are necessary because of the spaces in path.

The batch file outputs:

Parameter 1 as specified: "C:\Program Files\Internet Explorer\iexplore.exe"
Parameter 1 (no quotes):  C:\Program Files\Internet Explorer\iexplore.exe

So in this example ~ results in getting value of first parameter without double quotes.

As dbenham already wrote, enter in a command prompt window following commands and read the help output in the window.

  1. help call or call /?
  2. help for or for /?
  3. help set or set /?

On many commands strings with spaces or other special characters – see last help page output after entering cmd /? – must be enclosed in double quotes. But others require that the double quotes are removed like on a comparison of two double quoted strings with command if or the double quotes are not wanted like on using echo.

One more example:

@echo off
if /I "%~n1" == "iexplore" echo Browser is Internet Explorer.
if /I "%~n1" == "opera" echo Browser is Opera.
if /I "%~n1" == "firefox" echo Browser is Firefox.

On this example ~n results in just getting the file name without double quotes, path and file extension from string passed as first parameter to the batch file.

Argument 0 is the currently executed batch file as it can be demonstrated with:

@echo off
echo Batch file was called with: %0
echo Batch file is stored on drive:  %~d0
echo Batch file is stored in folder: %~dp0
echo Batch file name with extension: %~nx0
Mofi
  • 46,139
  • 17
  • 80
  • 143
1

Depends on context which you've not provided.

For instance, if there is a filename in %%a, then %%~za will return the filesize, %%~ta the file date/time. Other times it may be a substring operator, such as %fred:~1,6% (the substring of fred, skipping the first 1 and selecting the next 6 maximum.

SachaDee
  • 9,245
  • 3
  • 23
  • 33
Magoo
  • 77,302
  • 8
  • 62
  • 84