I am trying to set up a TeamCity build process that runs a custom command line script. The script uses a variable so it needs a percent sign (e.g. %x
). But TeamCity uses percent signs for its properties (e.g. %build.number%
), so the percent sign in the script gets removed when it runs.
If the script contains this:
for /d %x in ("c:\*") do @echo "%x"
This is what it actually runs:
for /d x in ("\*") do @echo "x"
How can I write my script so it can include variables?
Specify the working directory where the command is to be run (if it differs from the build checkout directory). Specify the mode: run an executable with parameters or run custom shell/batch script (see below). The option is available if "Executable with parameters" is selected in the Run drop-down menu.
If you want to pass %
to TeamCity, you should escape it with another %
, i.e. for % it must be
%%`.
But the Windows command line considers %
as an escape character, so you should escape it again adding another %
before each %
, i.e. for %%
you should pass %%%%
Flow is:
%%%% in cmd -> %% in TeamCity -> % actual sign.
tl;dr: the answer to your question will be:
for /d %%%%x in ("c:\*") do @echo "%%%%x"
Try for /d %%x in ("c:\*") do @echo "%%x"
(i.e. duplicate the % signs).
But there should be a way to tell TC to leave the file alone. It would be horrible if TC would remove the percent signs in the sources. Therefore, I'm pretty sure that you did something in the configuration to enable replacement of %
.
On a similar note, is it really TC that messes with the script? Or are you using a build tool to generate the script or something like that?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With