If you find yourself in the unlucky position to have to write some batch files for the Windows CE5 version of cmd.exe (called Pocket CMD v 5.0) you might be interested in these peculiarities I stumbled across today:
IF EXIST foldername GOTO label
This will not tell you for real if a folder called
"foldername"exists and jump to
"label"if it does. Instead, this will always fail and never jump to the designated target label. You can try this yourself with
IF NOT EXIST \WINDOWS ECHO "I have no OS"
If this output were true, I'd wonder where the Pocket CMD that had issued the command came from.
You need to check for a file contained in that folder with
IF EXISTS, which will work fine. If you do not know a file name to check for - for example if you want to check if a removable storage card is inserted, you can check for the "nul" file which will always exist on a FAT formatted drive, according to Microsoft Knowledge Base Entry #65994
IF ERRORLEVEL 10 GOTO fatalError
This will not jump to the
"fatalError"label in case the program that last finished with an exit code of 10 or above.
Instead you will get an error message "
Bad errorlevel conditional". In the German localization of CE5 this is even better: "
Ungültige Bedingung in Fehlerebene" and proves that the person who translated this had no idea what the message meant. The problem in fact is, that the Pocket CMD only allows single digit error levels!
If you want (or rather have) to use errorlevels in your batch script, you better hope (or can control) the exit codes of the applications you'd like to query.
If I come across more things like this, I will update this post.