2009-09-29 3 views
2

Je suis au courant% ~ dp0, qui représente le répertoire complètement dilatée qui contient le script batch, mais ce que je suis à la recherche est:Existe-t-il un moyen d'avoir un script shell Windows exécutant tout ce qui concerne son emplacement plutôt que l'emplacement à partir duquel il a été appelé?

  • une méthode pour appeler le script batch de Perl dans un tel d'une manière qui me permet d'utiliser le script batch sans modification et d'y avoir tous les répertoires en relation avec l'emplacement du script batch
  • une seule instruction que je peux mettre dans le script batch qui est un drapeau pour utiliser l'emplacement du batch script comme le point de départ pour tous les répertoires

J'appelle actuellement t Le script de traitement par lots utilisant cette méthode en Perl:

`"../run.bat" -f $ARGV[$#ARGV]`; 

puis de capturer la sortie et de procéder au traitement.

+2

Je ne suis pas du tout au courant de% ~ dp0. Regarde horrible. Qu'Est-ce que c'est? – innaM

+1

Manni: Lorsqu'il est utilisé dans un fichier de commandes, il contient le lecteur ('d') et le chemin complet (' p') du zéro-ième argument ('0'), i. e. le programme/lot en cours d'exécution. Vous pouvez trouver plus à ce sujet dans 'help for'. C'est une connaissance de fichier par lots assez standard. – Joey

+1

Et les gens disent que Perl ressemble à du bruit de ligne. Merci pour l'information. – innaM

Répondre

5

Je ne suis pas certain de comprendre votre question. Mais pourquoi ne changez-vous pas simplement le répertoire actuel de votre script perl dans le répertoire du script batch, puis appelez le script batch?

+0

Je me sens idiote de ne même pas y penser ... c'est parfait. –

3

Utilisez pushd et popd. Ajoutez la ligne

@pushd %~dp0 

au début du script de traitement par lots. Cela va changer le répertoire de travail dans le répertoire de base du fichier batch. Par souci d'exhaustivité (et dans le cas où le fichier batch va être utilisé par d'autres fichiers batch), vous devez ajouter

@popd 

à la fin.

0

Voici un script de chauve-souris qui commence un script perl serveur de catalyseur contenu dans l'emplacement par rapport au script .bat: myPHP/script/

set bindir=%~dp0 
set perlpath=%bindir%perl\bin 
set buildpath=%bindir%\bin 
set PATH=%PATH%;%perlpath%;%buildpath% 
"%perlpath%\wperl.exe" "%bindir%MyPhp\script\myphp_server.pl" -p 35900 

Voici un script VBS pour démarrer ce même script sans de frai un cmd fenêtre:

Set fso = CreateObject("Scripting.FileSystemObject") 
Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & fso.GetParentFolderName(wscript.ScriptFullName) & "\perl shell.bat"& Chr(34), 0 
Set WshShell = Nothing 

vraiment horrible des choses, mais cela fonctionne

Questions connexes