它非常简单的cmd代码但是我无法知道它应该如何在我的带有shell的
上运行请帮助转换脚本:
@echo off
setlocal enableextensions enabledelayedexpansion
设置
set sWorkFolder=d:\workfolder
set sSourceFolder=%sWorkFolder%\waiting-to-convert
set sDestFolder=%sWorkFolder%\done
set sBackupFolder=%sWorkFolder%\trash
set sPath2ffmpeg=%sWorkFolder%\ffmpeg\bin\ffmpeg.exe
开始循环
for /r "%sSourceFolder%" %%i in (*.mp4) do call :action "%%i"
endlocal
exit /b
:action
setlocal enableextensions enabledelayedexpansion
set "sSourcePath=%~dp1"
set "sDestPath=%sDestFolder%!sSourcePath:%sSourceFolder%=!"
if not exist "%sDestPath%." md "%sDestPath%"
set "sDestFile=%sDestPath%%~n1.720p%~x1"
"%sPath2ffmpeg%" -i "%~f1" -vcodec h264 -vf "scale=trunc(oh*a/2)*2:min(720p\,ih)" -b:v 2000k -preset faster -acodec copy -y "%sDestFile%"
set "sBackupPath=%sBackupFolder%!sSourcePath:%sSourceFolder%=!"
if not exist "%sBackupPath%." md "%sBackupPath%"
move /y "%~1" "%sBackupPath%"
endlocal
exit /b
答案 0 :(得分:1)
Shell脚本通常是echo off
。您可以使用set -vx
获取调试输出,并使用set +vx
将其关闭。这两个可以放在文件中的任何位置(最好是与其他文件分开的一行)。 (正如您将注意到的,下面set
与cmd的shell非常不同。
脚本的第一行应该是
#!/bin/bash
保存文件后,需要执行unix / linux命令
chmod 755 myScript.sh
将其标记为可执行文件。
如果你在windows上创建文件,或者使用windows ftp或windows中的任何东西,一旦你有文件到* nix,那么
dos2unix myScript.sh
set var=value
由DestPath=/path/to/dir
完成。使用
if [ ! -d "$DestPath" ] ; then mkdir "$DestPath'; fi
所有变量都被引用为"$var"
。
move
缩写为mv
。有关man mv
的查找等效选项,请参阅/y
。
for file in *.mp4 ; do cmd "$file" ; done
我在for循环中无法理解您的do :action
,因此我已将cmd
替换为“做一些工作”。您可以调用外部命令(多个),具有您调用的已定义函数或具有多cmd管道,例如
cmd1 file | filter_cmd | filter2_cmd > outfile
由于您的代码中包含标签(即:action
),因此您应该知道只有csh
允许goto
支持分支(您不希望在{}中开始编码{1}}!)。您必须重构代码才能在csh
和for
循环内工作,依靠while
和break
来更改循环内的处理。
转换这么多,然后使用http://shellcheck.net来表示错误。使用更正后的代码发布新问题,并显示确切的错误消息。
IHTH