Batch file 批处理脚本-双引号,消失行

Batch file 批处理脚本-双引号,消失行,batch-file,echo,Batch File,Echo,我一直在寻找答案,但没有找到任何结论性的解决办法。我几乎什么都有,所以我想我错过了什么 我正在创建一个批处理脚本,它将文件名作为参数,并从中创建一个avisynth脚本 见下文: echo.#BEGIN------------------------------------------------------------------------- >> %~n1-timecode.avs echo.#Found at: http://superuser.com/questions/1

我一直在寻找答案,但没有找到任何结论性的解决办法。我几乎什么都有,所以我想我错过了什么

我正在创建一个批处理脚本,它将文件名作为参数,并从中创建一个avisynth脚本

见下文:

echo.#BEGIN------------------------------------------------------------------------- >> %~n1-timecode.avs
echo.#Found at: http://superuser.com/questions/113666/how-can-i-burn-a-timecode-into-a-movie-file >> %~n1-timecode.avs
echo.global    xPos = 10 >> %~n1-timecode.avs
echo.global    yPos = 10 >> %~n1-timecode.avs
echo.global subsize = 40 >> %~n1-timecode.avs
echo.global subfont = "Arial" >> %~n1-timecode.avs
echo.#------------------------------------------------------------------------------ >> %~n1-timecode.avs
echo.function SubtitleTime( obj ) >> %~n1-timecode.avs
echo.{  >> %~n1-timecode.avs
echo.  obj = ScriptClip( obj, "Subtitle(  >> %~n1-timecode.avs
echo.  \   String( chr(32) ) >> %~n1-timecode.avs
echo.  \ + String( RightStr( String( ((int(current_frame/Framerate)/60)/60) ), 2 ) ) >> %~n1-timecode.avs
echo.  \ + String( chr(58) ) >> %~n1-timecode.avs
echo.  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate)/60)-(((int(current_frame/Framerate)/60)/60)*60) ) ), 2 ) ) >> %~n1-timecode.avs
echo.  \ + String( chr(58) ) >> %~n1-timecode.avs
echo.  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate))-(((int(current_frame/Framerate))/60)*60) ) ), 2 ) ) >> %~n1-timecode.avs
echo.  \ + MidStr( String( (current_frame/Framerate) -  (int(current_frame/Framerate)) ), 2, 4 ) >> %~n1-timecode.avs
echo.  \ , font=subfont, size=subsize, x=xPos, y=yPos) >> %~n1-timecode.avs
echo.  \ ") >> %~n1-timecode.avs
echo.  return obj >> %~n1-timecode.avs
echo.} >> %~n1-timecode.avs
echo.#------------------------------------------------------------------------------ >> %~n1-timecode.avs
echo.DirectshowSource("%1").SubtitleTime >> %~n1-timecode.avs
echo.#END--------------------------------------------------------------------------- >> %~n1-timecode.avs
但以下两行给出了问题:

echo.  obj = ScriptClip( obj, "Subtitle(  >> %~n1-timecode.avs
echo.  \ ") >> %~n1-timecode.avs

我试过双引号,反斜杠,^。。。它们都不起作用-要么显示双引号,要么显示行。任何人都能给我一个如何解决这个问题的提示吗

有问题的行中的不平衡引号将重定向转换为字符串文字,而不是重定向操作。修复原始代码的最快方法是避开不恰当的引号

@echo off

>  "%~n1-timecode.avs"    break
>> "%~n1-timecode.avs"    echo.#BEGIN-------------------------------------------------------------------------
>> "%~n1-timecode.avs"    echo.#Found at: http://superuser.com/questions/113666/how-can-i-burn-a-timecode-into-a-movie-file
>> "%~n1-timecode.avs"    echo.global    xPos = 10
>> "%~n1-timecode.avs"    echo.global    yPos = 10
>> "%~n1-timecode.avs"    echo.global subsize = 40
>> "%~n1-timecode.avs"    echo.global subfont = "Arial"
>> "%~n1-timecode.avs"    echo.#------------------------------------------------------------------------------
>> "%~n1-timecode.avs"    echo.function SubtitleTime( obj )
>> "%~n1-timecode.avs"    echo.{
>> "%~n1-timecode.avs"    echo.  obj = ScriptClip( obj, "Subtitle(
>> "%~n1-timecode.avs"    echo.  \   String( chr(32) )
>> "%~n1-timecode.avs"    echo.  \ + String( RightStr( String( ((int(current_frame/Framerate)/60)/60) ), 2 ) )
>> "%~n1-timecode.avs"    echo.  \ + String( chr(58) )
>> "%~n1-timecode.avs"    echo.  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate)/60)-(((int(current_frame/Framerate)/60)/60)*60) ) ), 2 ) )
>> "%~n1-timecode.avs"    echo.  \ + String( chr(58) )
>> "%~n1-timecode.avs"    echo.  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate))-(((int(current_frame/Framerate))/60)*60) ) ), 2 ) )
>> "%~n1-timecode.avs"    echo.  \ + MidStr( String( (current_frame/Framerate) -  (int(current_frame/Framerate)) ), 2, 4 )
>> "%~n1-timecode.avs"    echo.  \ , font=subfont, size=subsize, x=xPos, y=yPos)
>> "%~n1-timecode.avs"    echo.  \ ")
>> "%~n1-timecode.avs"    echo.  return obj
>> "%~n1-timecode.avs"    echo.}
>> "%~n1-timecode.avs"    echo.#------------------------------------------------------------------------------
>> "%~n1-timecode.avs"    echo.DirectshowSource("%1").SubtitleTime
>> "%~n1-timecode.avs"    echo.#END---------------------------------------------------------------------------
echo.  obj = ScriptClip( obj, ^"Subtitle(  >> %~n1-timecode.avs
echo.  \ ^") >> %~n1-timecode.avs
但是您的代码在输出的每行末尾都有额外的空格

您可以像mcnd那样将重定向移动到前端,这样可以安全地消除额外的空间

请注意,如果在重定向之前删除任何空间,即使在结尾重定向时也可以删除空间,但这在全局声明行中不起作用,因为结尾的数字将被视为重定向的一部分

但是有一个更简单的解决方案,它运行得更快,因为它只需要打开并定位输出文件的文件位置一次:-)

有时您的输出可能有需要转义的特殊字符。在这种情况下,这样做可能更容易避免任何逃逸:

>> %~n1-timecode.avs (
  for /f "tokens=* delims=:" %%L in ('findstr /b ::: "%~f0"') do echo(%%L
)

:::#BEGIN-------------------------------------------------------------------------
:::#Found at: http://superuser.com/questions/113666/how-can-i-burn-a-timecode-into-a-movie-file
:::global    xPos = 10
:::global    yPos = 10
:::global subsize = 40
:::global subfont = "Arial"
:::#------------------------------------------------------------------------------
:::function SubtitleTime( obj )
:::{
:::  obj = ScriptClip( obj, "Subtitle(
:::  \   String( chr(32) )
:::  \ + String( RightStr( String( ((int(current_frame/Framerate)/60)/60) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate)/60)-(((int(current_frame/Framerate)/60)/60)*60) ) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate))-(((int(current_frame/Framerate))/60)*60) ) ), 2 ) )
:::  \ + MidStr( String( (current_frame/Framerate) -  (int(current_frame/Framerate)) ), 2, 4 )
:::  \ , font=subfont, size=subsize, x=xPos, y=yPos)
:::  \ ")
:::  return obj
:::}
:::#------------------------------------------------------------------------------
:::DirectshowSource("%1").SubtitleTime
:::#END---------------------------------------------------------------------------

有问题的行中的不平衡引号将重定向转换为字符串文字,而不是重定向操作。修复原始代码的最快方法是避开不恰当的引号

echo.  obj = ScriptClip( obj, ^"Subtitle(  >> %~n1-timecode.avs
echo.  \ ^") >> %~n1-timecode.avs
但是您的代码在输出的每行末尾都有额外的空格

您可以像mcnd那样将重定向移动到前端,这样可以安全地消除额外的空间

请注意,如果在重定向之前删除任何空间,即使在结尾重定向时也可以删除空间,但这在全局声明行中不起作用,因为结尾的数字将被视为重定向的一部分

但是有一个更简单的解决方案,它运行得更快,因为它只需要打开并定位输出文件的文件位置一次:-)

有时您的输出可能有需要转义的特殊字符。在这种情况下,这样做可能更容易避免任何逃逸:

>> %~n1-timecode.avs (
  for /f "tokens=* delims=:" %%L in ('findstr /b ::: "%~f0"') do echo(%%L
)

:::#BEGIN-------------------------------------------------------------------------
:::#Found at: http://superuser.com/questions/113666/how-can-i-burn-a-timecode-into-a-movie-file
:::global    xPos = 10
:::global    yPos = 10
:::global subsize = 40
:::global subfont = "Arial"
:::#------------------------------------------------------------------------------
:::function SubtitleTime( obj )
:::{
:::  obj = ScriptClip( obj, "Subtitle(
:::  \   String( chr(32) )
:::  \ + String( RightStr( String( ((int(current_frame/Framerate)/60)/60) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate)/60)-(((int(current_frame/Framerate)/60)/60)*60) ) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate))-(((int(current_frame/Framerate))/60)*60) ) ), 2 ) )
:::  \ + MidStr( String( (current_frame/Framerate) -  (int(current_frame/Framerate)) ), 2, 4 )
:::  \ , font=subfont, size=subsize, x=xPos, y=yPos)
:::  \ ")
:::  return obj
:::}
:::#------------------------------------------------------------------------------
:::DirectshowSource("%1").SubtitleTime
:::#END---------------------------------------------------------------------------

有问题的行中的不平衡引号将重定向转换为字符串文字,而不是重定向操作。修复原始代码的最快方法是避开不恰当的引号

echo.  obj = ScriptClip( obj, ^"Subtitle(  >> %~n1-timecode.avs
echo.  \ ^") >> %~n1-timecode.avs
但是您的代码在输出的每行末尾都有额外的空格

您可以像mcnd那样将重定向移动到前端,这样可以安全地消除额外的空间

请注意,如果在重定向之前删除任何空间,即使在结尾重定向时也可以删除空间,但这在全局声明行中不起作用,因为结尾的数字将被视为重定向的一部分

但是有一个更简单的解决方案,它运行得更快,因为它只需要打开并定位输出文件的文件位置一次:-)

有时您的输出可能有需要转义的特殊字符。在这种情况下,这样做可能更容易避免任何逃逸:

>> %~n1-timecode.avs (
  for /f "tokens=* delims=:" %%L in ('findstr /b ::: "%~f0"') do echo(%%L
)

:::#BEGIN-------------------------------------------------------------------------
:::#Found at: http://superuser.com/questions/113666/how-can-i-burn-a-timecode-into-a-movie-file
:::global    xPos = 10
:::global    yPos = 10
:::global subsize = 40
:::global subfont = "Arial"
:::#------------------------------------------------------------------------------
:::function SubtitleTime( obj )
:::{
:::  obj = ScriptClip( obj, "Subtitle(
:::  \   String( chr(32) )
:::  \ + String( RightStr( String( ((int(current_frame/Framerate)/60)/60) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate)/60)-(((int(current_frame/Framerate)/60)/60)*60) ) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate))-(((int(current_frame/Framerate))/60)*60) ) ), 2 ) )
:::  \ + MidStr( String( (current_frame/Framerate) -  (int(current_frame/Framerate)) ), 2, 4 )
:::  \ , font=subfont, size=subsize, x=xPos, y=yPos)
:::  \ ")
:::  return obj
:::}
:::#------------------------------------------------------------------------------
:::DirectshowSource("%1").SubtitleTime
:::#END---------------------------------------------------------------------------

有问题的行中的不平衡引号将重定向转换为字符串文字,而不是重定向操作。修复原始代码的最快方法是避开不恰当的引号

echo.  obj = ScriptClip( obj, ^"Subtitle(  >> %~n1-timecode.avs
echo.  \ ^") >> %~n1-timecode.avs
但是您的代码在输出的每行末尾都有额外的空格

您可以像mcnd那样将重定向移动到前端,这样可以安全地消除额外的空间

请注意,如果在重定向之前删除任何空间,即使在结尾重定向时也可以删除空间,但这在全局声明行中不起作用,因为结尾的数字将被视为重定向的一部分

但是有一个更简单的解决方案,它运行得更快,因为它只需要打开并定位输出文件的文件位置一次:-)

有时您的输出可能有需要转义的特殊字符。在这种情况下,这样做可能更容易避免任何逃逸:

>> %~n1-timecode.avs (
  for /f "tokens=* delims=:" %%L in ('findstr /b ::: "%~f0"') do echo(%%L
)

:::#BEGIN-------------------------------------------------------------------------
:::#Found at: http://superuser.com/questions/113666/how-can-i-burn-a-timecode-into-a-movie-file
:::global    xPos = 10
:::global    yPos = 10
:::global subsize = 40
:::global subfont = "Arial"
:::#------------------------------------------------------------------------------
:::function SubtitleTime( obj )
:::{
:::  obj = ScriptClip( obj, "Subtitle(
:::  \   String( chr(32) )
:::  \ + String( RightStr( String( ((int(current_frame/Framerate)/60)/60) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate)/60)-(((int(current_frame/Framerate)/60)/60)*60) ) ), 2 ) )
:::  \ + String( chr(58) )
:::  \ + String( RightStr( String( String( 0 ) + String( (int(current_frame/Framerate))-(((int(current_frame/Framerate))/60)*60) ) ), 2 ) )
:::  \ + MidStr( String( (current_frame/Framerate) -  (int(current_frame/Framerate)) ), 2, 4 )
:::  \ , font=subfont, size=subsize, x=xPos, y=yPos)
:::  \ ")
:::  return obj
:::}
:::#------------------------------------------------------------------------------
:::DirectshowSource("%1").SubtitleTime
:::#END---------------------------------------------------------------------------

当你回显这两行时,你在文件中得到了什么?更重要的是,你想得到什么…如果它在一个循环中,那么这就是区别。当你回显这两行时,你在文件中得到了什么?更重要的是,你想得到什么…如果它在一个循环中,那么这就是区别。当你回显这两行中的每一行时,你在文件中得到了什么?更重要的是,你想得到什么…如果它在一个循环中,那么这就是区别。当你回显这两行中的每一行时,你在文件中得到了什么?更重要的是,你想要得到什么…如果它在一个循环中,那么这就是区别。