0

これが私のdosコマンドコードです。

名前変更バッチ ツールから現在のファイル名を取得しdos commandて実行する必要があります。確かに私はコマンドを壊すだけです

add +filename+ with quotes like "cmd /c \\Converter.exe \\android\\"+filename+" -android -o \\android\\"+filename

ただし、私のファイルは別のものにありclassます。getfilename(null)動作しない日食サジェッツ。

これどうやってするの?以下ではワイルドカードを試しましたが、もちろんうまくいきません。

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class doscommand {         
    public static void run() {            
        try {
                 Runtime rt = Runtime.getRuntime();                 
             //Process pr = rt.exec("cmd /c dir");                 
             Process pr = rt.exec("cmd /c \\Converter.exe \\android\\*.sdtid -android -o \\android\\*.txt");                  
             BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));                  
             String line=null;                 
                 while((line=input.readLine()) != null) {                     
                         System.out.println(line);
                 }                  
                 int exitVal = pr.waitFor();                 
                 System.out.println("Exited with error code "+exitVal);              
            } catch(Exception e) {                 
            System.out.println(e.toString());                 
             e.printStackTrace();             
           }         
 }
} 

コードの名前を変更する

private void renameFile(){

boolean operationResult = false;
boolean overallResult = true;
int failCount = 0;

/* the operation of this part is ensured by the chooseDirectory()
 * WE get the list of files in the directory
 * get the conditions set by users
 * and perform the file rename operation.
 */

//Let's get all the information from user
String[] fileList = directory.list();  //the list of files in the directory
String Prefix = txtPrefix.getText();
String Rename = txtRename.getText();
String Suffix = txtSuffix.getText();
String digits = (String) cboSequence.getSelectedItem();
int StartingNum;
String generatedSequence;
File oldFile;

//let's call the output frame
if(cbxOutput.isSelected() && OUTPUT_ON == false){
    buildOutput();
    OUTPUT_ON = true;
}




//display the list of files and readability of each file
for(int i = 0; i < fileList.length; i++){   
    oldFile = new File(directory.getPath()+"/"+ fileList[i]);
    String readability = fileList[i] +" - readable?: "+oldFile.canRead();
    System.out.println(readability);

    if(OUTPUT_ON)
        txaOutput.append("\n"+readability);
}

for(int i = 0; i < fileList.length; i++){

    /* get the file extension that we need, and form a new name, 
     * we would check if the Ignore File Extension is selected
     */
    oldFile = new File(directory.getPath()+"/"+ fileList[i]);

    String fileExtension;

    if(cbxIgnoreExtension.isSelected() == true ){
        fileExtension = "";
    }
    else
        fileExtension = getFileExtension(fileList[i]);

    //this part get the original filename       
    String fileName = getFileName(fileList[i]);



    String inputInfo = "The input filename->"+ fileList[i] + "\nfile name->" + fileName + "\nextension->" + fileExtension;   
    System.out.println(inputInfo);

    if(OUTPUT_ON)
        txaOutput.append("\n"+inputInfo);



    /* generate sequence for the Name
     *if the digits selection is NONE, we ignore it
     */
    if(digits.equals("None") == true){
        generatedSequence = "";
        }
        else{
            StartingNum = Integer.parseInt(txtSequence.getText());
            generatedSequence = nameSequence(StartingNum + i, digits);
        }




    //this is affected by the RenameOption, if Rename has something then only we RENAME
    if(cbxRename.isSelected() == true){
        fileName = Rename + generatedSequence;   //the fileName will change.
    }
    else{
        //if Rename has nothing, but the txtSequence has some Value, we take it to the naming too
        fileName = fileName.substring(0,4)+ generatedSequence;
        if(cbxAndroid.isSelected() == true ){
            doscommand.run();
            }



    //the New File Name
    String newFileName = Prefix + fileName.substring(0,4) + Suffix + fileExtension;
    String tentativeName = "new Filename will be ->"+newFileName+"\n";
    System.out.println(tentativeName);

    if(OUTPUT_ON)
        txaOutput.append("\n"+tentativeName);




        // ! Perform the file rename, if the Experimental Mode is not selected
        if(cbxExperiment.isSelected() == false){

            operationResult = oldFile.renameTo(new File(directory.getPath()+"/"+newFileName));
            String renameResult = "\t*Rename successfully?: " + operationResult+"\n\n";
            System.out.println(renameResult);
                if(operationResult == false)
                    failCount++;

                if(OUTPUT_ON)
                txaOutput.append("\n"+renameResult);

            //make up the overall result
            overallResult = (operationResult && overallResult);
        }

}

if(cbxExperiment.isSelected() == false){
        System.out.println("Overall Result: "+overallResult);
        if(overallResult)
            JOptionPane.showMessageDialog(null, "All files renamed successfully!");
        else
            JOptionPane.showMessageDialog(null, "File renamed with "+ failCount+ " failure(s)");
}//end if
}

}//end renameFile
4

2 に答える 2

0

私は Java コードを読んでいませんが、あなたのバッチ コードはかなり間違っているように見えます。

\\Converter.exeファイル名として持つべきではありません。きっとそうなるはずConverter.exe

サーバー共有を介してファイルを使用している場合を除き、その場合はバックスラッシュをエスケープしてサーバー名を のように指定する必要があります\\\\server\\Converter.exe

"\\android\\"+filenameであるべきものと同じ"android\\"+filenameです。(引用符をエスケープするために使用していると思いますが\\*.sdtid、これが C# と Java で同じかどうかはわかりません)。

バッチ コマンドは次のようになります。

"cmd /c Converter.exe android\\"+filename+" -android -o android\\"+filename

スペースの場合にファイル名を引用する必要がある場合は、エスケープする必要があると思いますが、C# ではこれは\".

これが問題でない場合は、残りのコードをデバッグするか、質問を改善することをお勧めします。

于 2012-06-25T16:12:49.410 に答える
0

私はついに問題を理解しました。\\android\\"+filename worked

于 2012-06-25T20:38:26.960 に答える