web-dev-qa-db-fra.com

Comment convertir un script bash shell en fichier .bat?

J'ai un script bash Shell sur mon Mac, que je dois convertir en fichier .bat (du moins, c'est ce que l'on m'a dit) pour les utilisateurs qui se trouvent sur un PC. Je me demandais quelle était la meilleure façon de procéder, ou si quelqu'un connaissait de bonnes références. Il semble que je ne pose pas la bonne question à Google pour me diriger dans la bonne direction.

Plus précisément, des choses comme: comment pourrais-je faire un ...

cd ~/Documents/DropFolder

(... où ~/est égal à la racine du répertoire personnel de l'utilisateur, quel que soit le nom de l'utilisateur)?

Ou, lorsque vous travaillez sur des variables et des instructions "do" ...

for i in *.xml
do
  Java -Xss650K -Xms128m -Xmx2048m -jar /Applications...
done

Et enfin, identifier et utiliser les noms de base ...

  cp -p `basename $i .xml`.xml ~/Documents/ReadyForServer/`basename $i .xml`/

Merci pour toute orientation, ou des suggestions pour d'autres solutions. LO

13
LOlliffe

En fait, les éléments que vous mentionnez sont faciles à transférer dans un fichier de commandes Windows. Bien que can utilise les ports Windows de tous les outils Unix (ou même une couche d’émulation pour encore plus de plaisir), ceci n’est pas difficile à faire:

  1. ~ pour le dossier personnel de l'utilisateur

    Le profil de l'utilisateur réside dans la variable d'environnement %USERPROFILE%. Par conséquent, procédez comme suit:

    cd %USERPROFILE%\Documents\DropFolder
    
  2. Itération sur un ensemble de fichiers

    La commande for est utile ici:

    for %%i in (*.xml) do -Xss650K -Xms128m -Xmx2048m -jar ... %%i
    

    Évidemment, vous devez cependant adapter le chemin d'accès au fichier JAR.

    Et for a de nombreuses autres utilisations que celle-ci, jetez donc un coup d'œil également à help for.

  3. nom de base

    Vous devez le faire dans un sous-programme ou dans une boucle for, car la syntaxe suivante est spécifique aux variables ou aux paramètres de la boucle. Cela ne fonctionnera pas avec les variables d'environnement tel quel. Vous pouvez obtenir ce que basename vous donne en utilisant %%~ni%%i si la variable de boucle ou %~n1 si %1 est l'argument d'un sous-programme ou d'un fichier de traitement par lots que vous avez. Donc, ce qui suit ferait probablement la même chose:

    copy "%%~ni.xml" "%USERPROFILE%\Documents\ReadyForServer\%%~ni\"
    

    L'aide sur for contient plus d'informations sur ces éléments vers la fin.

13
Joey

Le shell Windows est un langage de script différent du shell bash. Vous devrez le porter. Alternativement, vous pouvez utiliser quelque chose comme cygwin ou mingw pour exécuter le shell bash sous Windows.

4
Maz

Vous pouvez également utiliser Git pour Windows, qui possède déjà un interpréteur de commandes Bash Shell intégré (GitBash).

3
scottyp

L'aide de F1 sur Windows est étonnamment utile lors de l'écriture de fichiers de commandes de style DOS. Sur le bureau Windows, appuyez sur F1 et recherchez lot. Le lien pour utiliser les paramètres de lot est très utile pour faire des trucs impairs avec DOS. La page "Utilisation de fichiers batch" est également très bonne. Comme d'autres affiches le mentionnent, il vaut mieux éviter le lot comme langage d'implémentation, mais si vous devez le faire, vous devez le faire.

1
tonyj

Vous devriez convertir à la main. Apprenez les commandes par lots, puis effectuez l'équivalent. Alternativement, vous pouvez utiliser GNU win32 unix tools. 

1
ghostdog74

Jetez un coup d'oeil à Powershell. Ce site a de nombreux exemples:

http://technet.Microsoft.com/en-us/scriptcenter/powershell.aspx

0
buckbova