Difference between revisions of "Batch Conversion Limitations"

From eXo Wiki
Jump to navigation Jump to search
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
For batch files to successfully convert into bash files for Linux and MacOS, there are some limitations for how they can be written. This page is to ensure that team members writing batch files are aware of some of those limitations.
For batch files to successfully convert into bash files for Linux and MacOS, there are some limitations for how they can be written. This page is to ensure that team members writing batch files are aware of some of those limitations.


=== Indenting nested if statements and for loops is necessary. ===
=== Indenting multi-line nested if statements and for loops is necessary. ===
With the limitations of tooling, nested statements that written without indentation will fail to convert.
With the limitations of tooling, nested statements that written without indentation will fail to convert.


Example that fails to convert:
Example that fails to convert:
<pre>
<pre style="color: red;">
if [...] (
if [...] (
some command
some command
Line 14: Line 14:
</pre>
</pre>


Instead, anything that is nested should have spacing to indicate the level of nesting. The closing parentheses are especially important.
Instead, anything that is nested should have spacing to indicate the level of nesting. Correct indentation on closing parentheses is especially important as that is how the converter determines the boundary.


Example that successfully converts:
Example that successfully converts:
<pre>
<pre style="color: blue;">
if [...] (
if [...] (
   some command
   some command
Line 25: Line 25:
)
)
</pre>
</pre>
Something like this is also okay:
<pre style="color: blue;">
if %nsl%==On (
  if %PPmode%==Off (
      if %filter%==On (
        set conf=".\emulators\dosbox\Staging_noline_sl.conf"
        goto preinstall)))
</pre>When all of the closing parenthesis are together, the converter splits them apart and converts each one as appropriate.


=== Labels must never be placed inside of loops or conditions. ===
=== Labels must never be placed inside of loops or conditions. ===
Line 30: Line 39:


Example that fails to convert:
Example that fails to convert:
<pre>
<pre style="color: red;">
if exist file2.txt goto mylabel
if exist file2.txt goto mylabel
if exist .\mydir\file1.txt (
if exist .\mydir\file1.txt (
Line 40: Line 49:


Example that successfully converts:
Example that successfully converts:
<pre>
<pre style="color: blue;">
if exist file2.txt goto mylabel
if exist file2.txt goto mylabel
if exist .\mydir\file1.txt (
if exist .\mydir\file1.txt (

Latest revision as of 12:51, 21 April 2026

For batch files to successfully convert into bash files for Linux and MacOS, there are some limitations for how they can be written. This page is to ensure that team members writing batch files are aware of some of those limitations.

Indenting multi-line nested if statements and for loops is necessary.

With the limitations of tooling, nested statements that written without indentation will fail to convert.

Example that fails to convert:

if [...] (
some command
if [...] (
some command
)
)

Instead, anything that is nested should have spacing to indicate the level of nesting. Correct indentation on closing parentheses is especially important as that is how the converter determines the boundary.

Example that successfully converts:

if [...] (
  some command
  if [...] (
    some command
  )
)

Something like this is also okay:

if %nsl%==On (
   if %PPmode%==Off (
      if %filter%==On (
         set conf=".\emulators\dosbox\Staging_noline_sl.conf"
         goto preinstall)))

When all of the closing parenthesis are together, the converter splits them apart and converts each one as appropriate.

Labels must never be placed inside of loops or conditions.

The converted goto function has been designed to work through stack frames for Linux and MacOS. For this reason, a label must never be placed inside of a loop or condition. Such code will fail to convert.

Example that fails to convert:

if exist file2.txt goto mylabel
if exist .\mydir\file1.txt (
  echo file1 exists
  :mylabel
  echo This does not convert
)

Example that successfully converts:

if exist file2.txt goto mylabel
if exist .\mydir\file1.txt (
  echo file1 exists
  goto mylabel
)
goto skip
:mylabel
echo This does not converts
:skip