2017-03-14 1 views
1

Je développe un nouveau portail pour mon entreprise .. Je dois commencer de nombreux fichiers de traitement par lots pour les différents noms de pc .. alors j'essaie d'exécuter mon lot avec un paramètre ..PHP - Comment faire pour exécuter un fichier batch avec des paramètres?

$path = $db->givePath($service); 
     $path = $path . " " . "PCNAME"; 
     if(exec("cmd /c" . $path)){ 
       echo "Successful sent"; 
     } else { 
      echo "Error"; 
     } 

Mais si je lance cette commande, rien ne se passe .. L'ancienne version a fonctionné:

$path = $db->givePath($service); 
     if(exec("cmd /c" . $path)){ 
       echo "Successful sent"; 
     } else { 
      echo "Error"; 
     } 

quelqu'un peut-il me aider ici?

+0

Pouvez-vous nous donner un exemple du chemin retourné? – TheDude

+0

services \ batch.bat –

Répondre

0

Vous rencontrez probablement des problèmes lors du passage du PCNAME comme argument parce qu'il a des caractères qui doivent être échappé. Vous pouvez lire plus sur escapeshellarg le TL; DR est il échappe à tous les caractères de contrôle qui feraient sortir l'exécution d'une manière inattendue. L'utilisation de quelque chose comme le chemin UNC pour PCNAME sans utiliser escapshellarg() pourrait faire croire aux fenêtres qu'un autre argument était spécifié.

$path = $db->givePath($service); 
$batchCmd = "C:\{$path} " . escapeshellarg('PCNAME'); 
if(exec("cmd /c {$batchCmd}")) { 
    echo 'Successfully sent'; 
} else { 
    echo 'Error'; 
} 
+0

et comment puis-je utiliser un paramètre? comme ici: début "" "P: \ ath to \ batch.bat" -parameter –

+0

Vous essayez de fournir un paramètre à votre script de traitement par lots ou vous essayez d'utiliser une option de ligne de commande quelconque? Si vous tapiez quelque chose directement dans la ligne de commande, que taperiez-vous? – TheDude

+0

démarrer fichier.bat pcname –

0

Vous pouvez à utiliser shell cmd:

system("cmd /c C:" . $path_to_file); 
+0

Ma base de données renvoie le bon chemin .. Si j'essaie d'exécuter la commande sans paramètres, cela fonctionnera .. –

+0

peut-être vous pouvez utiliser un fichier avec un nom d'utilisateur par exemple: 'C: \ Users \ Tony \ path \ to \ file.bat' –