Search code examples
batch-file

How to read file contents into a variable in a batch file?


This batch file releases a build from TEST to LIVE. I want to add a check constraint in this file that ensures there is an accomanying release document in a specific folder.

"C:\Program Files\Windows Resource Kits\Tools\robocopy.exe" "\\testserver\testapp$"        
"\\liveserver\liveapp$" *.* /E /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP
del "\\liveserver\liveapp$\web.config"
ren "\\liveserver\liveapp$\web.live.config" web.config

So I have a couple of questions about how to achieve this...

  1. There is a version.txt file in the \\testserver\testapp$ folder, and the only contents of this file is the build number (for example, 45 - for build 45) How do I read the contents of the version.txt file into a variable in the batch file?

  2. How do I check if a file ,\\fileserver\myapp\releasedocs\ {build}.doc, exists using the variable from part 1 in place of {build}?


Solution

  • Read file contents into a variable:

    for /f "delims=" %%x in (version.txt) do set Build=%%x
    

    or

    set /p Build=<version.txt
    

    Both will act the same with only a single line in the file, for more lines the for variant will put the last line into the variable, while set /p will use the first.

    Using the variable – just like any other environment variable – it is one, after all:

    %Build%
    

    So to check for existence:

    if exist \\fileserver\myapp\releasedocs\%Build%.doc ...
    

    Although it may well be that no UNC paths are allowed there. Can't test this right now but keep this in mind. Note that with the set /P command the file cannot be in Unicode format.

    If the file is beside the script instead of %CD%, then you can use "%~dp0", like:

    set /p Build=<%~dp0version.txt