Reputation: 3344
I'm trying to write a Windows cmd script to perform several tasks in series. However, it always stops after the first command in the script.
The command it stops after is a maven build (not sure if that's relevant).
How do I make it carry on and run each task in turn please?
Installing any software or configuring the registry etc is completely out of the question - it has to work on a vanilla Windows XP installation I'm afraid.
Ideally I'd like the script to abort if any of the commands failed, but that's a "nice to have", not essential.
Thanks.
Upvotes: 141
Views: 292361
Reputation: 11800
Using double ampersands will run the second command, only if the first one succeeds:
cd Desktop/project-directory && atom .
Where as, using only one ampersand will attempt to run both commands, even if the first fails:
cd Desktop/project-directory & atom .
Upvotes: 6
Reputation: 111866
I don't know the direct answer to your question, but if you do a lot of these scripts, it might be worth learning a more powerful language like perl. Free implementations exist for Windows (e.g. activestate, cygwin). I've found it worth the initial effort for my own tasks.
Edit:
As suggested by @Ferruccio, if you can't install extra software, consider vbscript and/or javascript. They're built into the Windows scripting host.
Upvotes: 1
Reputation: 11
If you are running in Windows you can use the following command.
Drive:
cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit
Upvotes: 1
Reputation: 727
Note that you don't need semicolons in batch files. And the reason why you need to use call is that mvn itself is a batch file and batch files need to call each other with call, otherwise control does not return to the caller.
Upvotes: 0
Reputation: 775
I have just been doing the exact same(ish) task of creating a batch script to run maven test scripts. The problem is that calling maven scrips with mvn clean install ... is itself a script and so needs to be done with call mvn clean install.
Code that will work
rem run a maven clean install
cd C:\rbe-ui-test-suite
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1
Note rather the use of call. This will allow the use of consecutive maven scripts in the batch file.
Upvotes: 23
Reputation: 89172
When you call another .bat file, I think you need "call" in front of the call:
call otherCommand.bat
Upvotes: 144
Reputation: 52188
Not sure why the first command is stopping. If you can make it parallel, you can try something like
start cmd.exe /C 1.bat
start cmd.exe /C 2.bat
Upvotes: 25
Reputation: 481
You can use the && symbol between commands to execute the second command only if the first succeeds. More info here http://commandwindows.com/command1.htm
Upvotes: 45