2009-01-16 5 views
0

J'ai écrit un fichier batch qui lit dans un fichier texte contenant une liste de noms de fichiers, puis les supprime et les renommer un par un. Je l'ai fait en utilisant une boucle for, et cela fonctionne parfaitement en double-cliquant dessus. Mais quand j'ai essayé d'appeler ce lot à partir d'un programme Java. Il ne fonctionne plus pour cette partie:Le batch ne fonctionne pas si vous appelez depuis un programme Java

for /f %%a in (ListFile.txt) do (
    DEL %%a 
    REN %%a_NEW %%~nxa 
)

Si je ne spécifie qu'un certain nom de fichier. Cela fonctionne en appelant de Java. Dites,

DEL tag.jar 
REN tag.jar_NEW tag.jar

La même chose se produit pour la commande 'call'. Cela ne fonctionne pas si j'appelle depuis le programme Java, ce qui me demande d'utiliser la commande 'start'. Est-ce que quelqu'un peut me dire pourquoi est-ce comme ça? Comment puis-je le faire fonctionner également si j'appelle du programme Java?

+0

Aucune raison pour les votes en bas. +1 – cdeszaq

Répondre

1

Comment l'appelez-vous de Java?

Que se passe-t-il exactement quand vous le faites? Pourquoi appelez-vous un fichier batch au lieu de faire la même chose en Java, quand vous l'appelez de Java quand même?

0

Peut-être que le répertoire actuel n'est pas ce que vous pensez, donc le fichier ListFile.txt est introuvable.

Essayez quelque chose comme:

set BAT_HOME=%~dp0 
echo %BAT_HOME% 

for /f %%a in (%BAT_HOME%\ListFile.txt) do (
    DEL %%a 
    REN %%a_NEW %%~nxa 
) 
1

Vous devez utiliser:

Runtime.getRuntime().exec("cmd /c update.bat"); 

lieu.

Here est un extrait sur la façon d'exécuter des programmes à partir de Java.

Et ci-dessous comment je l'ai testé.

import java.io.*; 
public class RunIt { 
    public static void main(String [] args) throws Throwable { 
     Process p = Runtime.getRuntime().exec("cmd /c update.bat"); 
     InputStream i = p.getInputStream(); 
     for( int c = 0 ; (c = i.read()) > -1 ;) {} 
     i.close(); 
    } 
} 

Pour une raison qui va au-delà de ma compréhension, si je ne lis pas l'entrée du processus ne soit pas exécuté, c'est la raison de la boucle pour ci-dessus.

Voici mon test:

C:\oreyes\samples\java\readinput>type update.bat 
echo "x" >> x.txt 

C:\oreyes\samples\java\readinput>dir x.txt 
Directorio de C:\oreyes\samples\java\readinput 

No se encuentra el archivo // That is file not found 

C:\oreyes\samples\java\readinput>javac RunIt.java 

C:\oreyes\samples\java\readinput>java RunIt 

C:\oreyes\samples\java\readinput>dir x.txt 

01/16/2009 11:14 AM     6 x.txt // file created hence update.bat executed 
       1 archivos    6 bytes 

J'espère que cela aide.

0

Processus p = Runtime.getRuntime(). Exec ("update.bat");

p.waitFor();

0

Êtes-vous sûr de pouvoir exécuter un script BAT? Je ne pense pas que Windows les traite comme des exécutables de première classe comme le fait Unix. Vous devrez peut-être faire quelque chose de bizarre comme:

...exec("cmd /c update.bat") 
Questions connexes