业余编码员在这里。我有一个旧的R脚本,可以跨多个文件夹在文件上运行SoX统计信息,并将输出写入txt文件。对等方请求在其Windows计算机上使用它,并希望能够只单击.bat文件来运行它。我做了一个,但它将SoX统计数据输出到批处理文件窗口,并且统计数据通常输出的txt文件是空白的。我读过它是因为R处理stderr但我无法找到解决问题的方法。我真的只精通R,但一直在教自己Python,所以如果有另外一种类似的语言解决方案,我会全力以赴。
我的“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 :(得分:0)
解决这个问题的一种方法是使用Julia,即available for Windows。这个过程的主要内容如下:
run(pipeline(`soxi mytest.wav`,"soxi.out"))
此代码使用反引号向Julia发出控制台命令信号,将管道设置为命名文件并运行整个事件。您可以根据需要使用readdir()
检查目录的内容到文件名数组中,并根据需要在数组上放置过滤器。