删除批处理脚本中的前导“./”
remove leading "./" in a batch script
for f in ./*.mp3; do sox "$f" "${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
这是我用来处理音频文件的脚本。问题是它一直在循环,同时处理新的音频文件。我想通过将输出放在子文件夹中来解决这个问题,所以我尝试了这个:
for f in ./*.mp3; do sox "$f" "/subfolder${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
这是输出:
/subfolder./01processed.mp3
这给我一个 Sox 错误,我需要删除文件名输出前的 ./,我该怎么做?这是我想要的输出:
/subfolder/01processed.mp3
for f in *.mp3; do sox "$f" "/subfolder/${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
for f in ./*.mp3; do
out=${f#./}
out=${out%%.mp3}processed.mp3
sox "$f" "/subfolder/$out" silence 1 0.02 1% -1 0.02 1%
done
您可以去除前导 ./
和尾随 mp3
,但参数扩展需要一次一个地完成(它们不能嵌套)。您 可以 仅去除前导 .
并保留 /
以供构建输出路径时使用,但将其取出并显式放回更清楚。 (/subfolder$out
没有明确表示文件被放在名为 subfolder
的文件夹中,而不是创建一个名为 subfolder$out
的 file/folder。)
顺便说一下,for f in ./*.mp3
是最正确的版本,因为它可以处理以 -
开头的文件;否则,sox
可能会将输入的文件名误认为是一个选项。
for f in ./*.mp3; do sox "$f" "${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
这是我用来处理音频文件的脚本。问题是它一直在循环,同时处理新的音频文件。我想通过将输出放在子文件夹中来解决这个问题,所以我尝试了这个:
for f in ./*.mp3; do sox "$f" "/subfolder${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
这是输出:
/subfolder./01processed.mp3
这给我一个 Sox 错误,我需要删除文件名输出前的 ./,我该怎么做?这是我想要的输出:
/subfolder/01processed.mp3
for f in *.mp3; do sox "$f" "/subfolder/${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done
for f in ./*.mp3; do
out=${f#./}
out=${out%%.mp3}processed.mp3
sox "$f" "/subfolder/$out" silence 1 0.02 1% -1 0.02 1%
done
您可以去除前导 ./
和尾随 mp3
,但参数扩展需要一次一个地完成(它们不能嵌套)。您 可以 仅去除前导 .
并保留 /
以供构建输出路径时使用,但将其取出并显式放回更清楚。 (/subfolder$out
没有明确表示文件被放在名为 subfolder
的文件夹中,而不是创建一个名为 subfolder$out
的 file/folder。)
顺便说一下,for f in ./*.mp3
是最正确的版本,因为它可以处理以 -
开头的文件;否则,sox
可能会将输入的文件名误认为是一个选项。