我试图在Windows批处理中创建一个例程来运行" sox.exe"在指定目录中的每个OGG文件上。我目前的问题是它没有正确处理路径,更不用说正确执行操作了。如果我在终端窗口中手动运行命令,单独为每个文件运行,它可以正常工作。
我还想让输出文件成为一个不同的名称(否则生成的文件会大量使用。
" sox.exe失败格式:无法打开输出文件`\ temp \ OGG \ Rain.ogg':没有这样的文件或目录"
@echo off
setlocal enabledelayedexpansion
cd Data
mkdir temp
for %%A in ("OGG\*.ogg") do (
sox.exe %%A -C 0 \temp\%%A
)
文件的一般布局如下:
OptOGG
|--OptOGG.bat
|
|--Data
|--OGG
| |--AudioFile.ogg
|
|--sox.exe
我也有所有sox.exe依赖项,并且已经过手工测试,我只是没有将它们包含在上面的布局中。
基本上,我想对目录中的所有ogg文件执行sox操作(稍后将更改为远程设备目录),让它们最终进入临时目录,然后将它们移回原始目录,覆盖原始文件,保留与原始文件相同的名称。
答案 0 :(得分:0)
以.\
开头的相对路径引用当前目录。
以..\
开头的相对路径引用当前目录的父目录。
以\
开头的相对路径引用当前驱动器的根目录。
因此,您在数据文件夹中创建了临时文件夹,但在 FOR 中指定了当前驱动器根目录中没有Temp
文件夹的临时文件夹。
这个带有额外检查的批次代码应该可以满足您的需要。
@echo off
setlocal
rem Get drive and path of batch file ending with a backslash and append
rem Data which is the name of the data folder containing in subfolder
rem OGG the audio files to optimize.
set "DataFolder=%~dp0Data"
rem Does this folder exist?
if not exist "%DataFolder%" (
echo Folder %DataFolder% does not exist!
goto EndBatch
)
if not exist "%DataFolder%\OGG" (
echo Folder %DataFolder%\OGG does not exist!
goto EndBatch
)
if not exist "%DataFolder%\OGG\*.ogg" (
echo Folder %DataFolder%\OGG does not contain any OGG file.
goto EndBatch
)
set "TempFolder=%DataFolder%\Temp"
if not exist "%TempFolder%" (
mkdir "%TempFolder%"
if errorlevel 1 (
echo Failed to create %TempFolder%
goto EndBatch
)
)
rem Run SOX on every OGG file in subfolder OGG of data
rem folder with output file written to temp folder.
for %%A in ("%DataFolder%\OGG\*.ogg") do (
echo "%DataFolder%\sox.exe" "%%~fA" -C 0 "%TempFolder%\%%~nxA"
)
endlocal
goto :EOF
:EndBatch
endlocal
echo.
echo Press any key to exit batch job %~n0.
pause >nul
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
goto /?
if /?
mkdir /?
pause /?
rem /?
set /?
setlocal /?
答案 1 :(得分:0)
感谢。很有帮助。我终于想出了一个像我想要的那样工作的脚本(关闭)。它并不完美,因为它不会在文件名中拉出带空格的文件。这是一个更大的脚本的一部分,因此优化标签在其他地方。
if %choice% == a (
if exist OGG del /Q OGG
@md OGG
cls
Echo.
Echo Mounting system R/W...
adb remount
Echo.
Echo Pulling audio files...
adb pull /system/media/audio/alarms/ .
for %%a in ("*.ogg") do (
Echo %%a
sox.exe %%a -C 0 "%current%\Data\OGG\%%a"
)
Echo.
Echo Pushing optimized audio back to device...
adb push OGG /system/media/audio/alarms
@rmdir /S /Q OGG
@del *.ogg
Echo.
Echo Optimizations complete!
Pause
goto optimizations
)