2014-12-06 5 views
2

왜 "1.bat"를 성공적으로 실행할 수 없습니까? 어떤 도움도 감사 할 것입니다. "1.bat"이 성공적으로 생성되었습니다. 오류없이 실행될 수 있지만 파일의 이름을 바꿀 수는 없습니다."* .bat"파일을 작성하는 방법은 무엇입니까?

private void button1_Click(object sender, EventArgs e) 
    { 

     string str = System.Environment.CurrentDirectory; 
     str += "\\1.bat"; 
     string txt = ""; 
     txt = "ren *.mp3 *.wav"; 

     StreamWriter sw = new StreamWriter(str,false, Encoding.UTF8); 
     sw.Write(txt); 
     sw.Close(); 

     Process p = new Process(); 
     p.StartInfo.FileName = str; 
     p.StartInfo.Arguments = ""; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
     p.Start();   
    } 
+3

_이 (가) 성공적으로 실행하지 못했습니다라는 의미는 무엇입니까? 모든 예외 또는 오류 메시지? –

+0

'0.bat'이 아니라'\\ 0.bat'처럼 보입니다. '\\ 0'은 NULL 문자이며이 문맥에서는 유효하지 않습니다. –

+0

StartInfo에서 UseShellExecute를 설정해보십시오. 그러나 파일을 일괄 적으로 이름을 바꾸려면 .bat를 호출 할 필요가 없습니다! C#에서 쉽게 코딩 할 수 있습니다. (현재 디렉토리에 대한 쓰기 권한이 있다고 가정해서는 안되며 악의적 인 사용자가 파일을 작성하고 실행하는 사이에 파일을 수정할 수있는 이론적 인 공격이 있습니다. 사용자가 임의의 명령을 사용자로 실행할 수 있습니다 .) – Rup

답변

5

한 가지 문제는 파일이 UTF-8 BOM으로 쓰여지고 있다는 것입니다. 이 문제를 테스트하려면 Encoding.Default을 전달하세요. 또는 new UTF8Encoding(false)을 BOM을 생략하는 UTF-8 인코딩을 전달하는 인코딩으로 전달하십시오.

UseShellExecutefalse으로 설정하면 문제가 발생합니다. 이를 위해서는 전달한 파일이 실행 파일이되어야합니다. 파일이 아닙니다. 셸이 .bat 파일을 처리하는 방법을 이해하려면 UseShellExecutetrue이어야합니다.

또 다른 가능한 문제점은 현재 디렉토리가 사용자가 생각하는대로되지 않을 수 있다는 것입니다.

이와 같은 문제에 직면했을 때 아무 도움도 필요가 없습니다. 디버깅을하십시오. 배치 파일 끝에 pause을 추가하고 콘솔을 볼 수 있는지 확인하십시오. 문제가 무엇인지 바로 알 수 있습니다. 디버깅 방법을 배우는 것은 프로그래밍 방법을 배우는 것만큼이나 중요합니다. 후자를 할 수있을 때까지는 후자를 할 수 없습니다.

내가 외부 프로세스로, 이런 식으로 할 필요한다면, 나는 다음과 같습니다

  • falseUseShellExecute를 설정합니다.
  • cmd.exe을 실행 파일로 전달하십시오.
  • 실행할 명령을 명령 줄로 전달하십시오.

그러나 C#을 사용하여이 작업을 직접 수행하는 것이 훨씬 쉬울 것이므로 외부 프로세스를 시작하지 않아도됩니다.

+0

네 말이 맞다! 고마워요 :) –

관련 문제