2017-01-27 9 views
0

아마추어 코더는 여기에 있습니다. 여러 폴더에 걸쳐 파일에 SoX 통계를 실행하고 txt 파일에 출력을 쓰는 오래된 R 스크립트가 있습니다. 피어가 Windows 컴퓨터에서이 파일을 사용하도록 요청했으며이를 실행하기 위해 .bat 파일을 클릭 할 수 있기를 원합니다. 나는 하나 만들었지 만 배치 파일 창에 SoX 통계를 출력하고 통계는 일반적으로 출력되는 txt 파일을 비워 둡니다. R이 표준 오류를 처리하는 방법 때문에 읽었지만 내 문제에 대한 해결책을 찾을 수 없습니다. 저는 R에 정통한 분이 십니다. 파이썬을 가르쳐 왔기 때문에, 대체 언어 솔루션이 있다면, 나는 모든 귀입니다. 사전에.bat를 통해 실행할 때 파일에 SoX 통계 작성하기

내 "삭스 - stats.R"스크립트

setwd("~/R/sox-stats/") 

for(l in list.dirs(recursive=FALSE)){ 
    setwd(paste0("~/R/sox-stats/", l)) 
    print(paste0("Directory set to ", l)) 
    dir.create("./stats/", showWarnings = FALSE) 
    directoryAll <- list.files() 
    statFolder <- list.files(pattern="stats") 

    for(file in setdiff(directoryAll, statFolder)){ 
    firstSox <- paste("sox \"",file,"\" -n stats",sep="") 
    write(system(firstSox, intern = TRUE), paste("./stats/", file, "_stats.txt", sep="")) 
    print(paste0(file, " has been processed."))  
    } 
} 

내 .bat 파일은

@ECHO OFF 
ECHO Hello, so you want to get some SoX Stats? 
ECHO ------------------------------------------------ 
ECHO   Press any key to start me up! 
PAUSE >NUL 
cd C:\Program Files\R\R-3.3.0\bin 
rscript sox-stats.R 
IF ERRORLEVEL 1 ECHO SoX Says: Something went wrong. Check messages 
above for clues. Press any key to close SoX Stats. 
IF NOT ERRORLEVEL 1 ECHO SoX Says: PROCESSING COMPLETE. Press any key to close this window 
and open your "sox-stats" folder. 
pause >nul 
IF NOT ERRORLEVEL 1 %SystemRoot%\explorer.exe "C:\Users\user\Documents\R\sox-stats" 

감사합니다!

답변

0

이 접근법의 한 가지 방법은 줄리아 (available for Windows)를 사용하는 것입니다.

run(pipeline(`soxi mytest.wav`,"soxi.out")) 

이 코드는 줄리아에 console 명령을 알리기 위해 역 따옴표를 사용하여 명명 된 파일에 파이프를 설정하고 모든 것을 실행 : 프로세스의 고기 무언가 같이 될 것입니다. 필요에 따라 readdir()을 사용하여 디렉토리 내용을 파일 이름 배열로 검사하고 필요에 따라 필터를 배열에 배치 할 수 있습니다.