2012-11-06 2 views
0

나는이 배치 파일이 있습니다출력 내용

@echo off 
echo StrText="Application created Successfully" > spk.vbs 
echo set ObjVoice=CreateObject("SAPI.SpVoice") >> spk.vbs 
echo ObjVoice.Speak StrText >> spk.vbs 
start spk.vbs 

이 배치 파일이 같은 디렉토리에 spk.vbs를 만들고 텍스트를 출력을 컴퓨터와 "성공적으로 생성 된 응용 프로그램" 목소리.

이제 배치 파일에 명령 줄 (% 1)에 제공된 텍스트 파일의 내용을 말하고 싶습니다. spk.vbs 파일은 기본 Windows 임시 디렉터리에 만들어야합니다. 어떻게해야합니까?

*** 편집 2012년 6월 11일 20시 24분

한편 내가 삭제 한 VBS 스크립트 파일을 생성하고 직접 VBS 스크립트를 사용하고자하는 배치 파일 스크립트를 사용하는 아이디어. 저는 VBS의 초심자이지만 다음과 같이 만들었습니다 :

Set objFSO = CreateObject("Scripting.FileSystemObject") 
strAFile = Wscript.Arguments(0) 
Set objFile = objFSO.GetFile(strAFile) 
If objFile.Size > 0 Then 
    Set objReadFile = objFSO.OpenTextFile(Wscript.Arguments(0), 1) 
    strContents = objReadFile.ReadAll 
    objReadFile.Close 
    set ObjVoice=CreateObject("SAPI.SpVoice") 
    ObjVoice.Speak strContents 
Else 
    Wscript.Echo "The file is empty." 
End If 

그것은 작동하지만, 나는 많은 실수를 범했습니다. 누군가가 vbs 스크립트가 어떻게 최적화 될 수 있는지 말해 줄 수 있습니까? 고맙습니다!

*** 편집 2012년 6월 11일 22시 19분

이 몇 번 일을 한 후, 지금은 더 이상 작동하지 않습니다 이제 컴퓨터 스피커 출력 전용 "Y"텍스트 파일의 첫 번째 문자를! 스크립트의 오류와 관련이 있습니까?

*** 수정 10.11.2012 19:32 발견 : 위의 스크립트는 ANSI 코드로 된 텍스트 파일에서만 작동합니다. 유니 코드 텍스트 파일에서는 작동하지 않습니다! 왜? 유니 코드 텍스트 파일에서도 어떻게 작동합니까?

답변

1

.OpenTextFile (또는 .OpenAsTextStream의 두 번째 매개 변수) 메서드의 네 번째 매개 변수를 사용하여 파일을 ASCII 또는 유니 코드 (16)로 열 것인지 여부를 지정합니다. (명시 적)

  • 사용자가 하나 이상의 인수를 통과했는지 여부를 확인

    1. "명시 적 옵션"을 사용하여 :

      난 당신의 코드에 어떤 심각한 실수를 찾을 수없는, 그러나 아마 당신이 고려해야 할 다른 이름/변수를 통해 같은 '객체를 참조 할 피하는 스크립트

    2. 에 (strAFile, WScript.Arguments (0)) 이미 파일 객체를 가지고 .OpenAsTextStream를 사용
    3. voiding '마법의 숫자'(예 : 1) 불필요한 변수를 피하고 적절한 상수 (예 : ForReading)
    4. (당신이 작성하지 않은 코드가 잘못 될 수 없음)

    예 정의하여 :

    Set objReadFile = objFSO.OpenTextFile(WScript.Arguments(0), 1) 
    strContents = objReadFile.ReadAll 
    objReadFile.Close 
    

    ==>

    Const cnUnicode = -1 
    ... 
    strContents = objFile.OpenAsTextStream(ForReading, cnUnicode).ReadAll()