2017-01-27 28 views
0

業餘編碼器在這裏。我有一箇舊的R腳本,用於在多個文件夾中的文件上運行SoX統計信息,並將輸出寫入txt文件。同行請求在Windows機器上使用它,並希望能夠單擊一個.bat文件來運行它。我做了一個,但它輸出SoX統計到批處理文件窗口和統計通常輸出爲空的txt文件。我讀過這是因爲R處理stderr,但我找不到解決方案。我真的只熟悉R,但一直在教自己的Python,所以如果有這樣的替代語言解決方案,我全都是耳朵。通過.bat運行時將SoX Stats寫入文件

我的 「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

解決這個問題的方法之一是使用Julia,它是available for Windows。這個過程的肉會是這樣的:

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

該代碼使用反引號信號控制檯命令朱莉婭,建立一個管道進入一個已命名的文件並運行整個事情。您可以根據需要將readdir()所需的目錄內容複製到一個文件名數組中,並根據需要在數組上放置一個過濾器。