我正在使用Windows命令行环境编写批处理文件脚本,并希望将文件中某些文本(例如"FOO")的每次出现更改为另一个(例如"BAR").最简单的方法是什么?任何内置功能?
我一直在努力尝试在这个批处理文件中获得正确的语法,我无法弄清楚为什么有些东西不起作用.
i每次执行此变量时,变量都不会增加.strc似乎没有连接.这是我的代码:
set i=0
set "strc=concat:"
for %%f in (*.mp4) do (
set /a i+=1
set "str=intermediate%i%.ts"
set strc="%strc% %str%|"
ffmpeg -i "%%f" -c copy -bsf:v h264_mp4toannexb -f mpegts "%str%"
)
set strc="%strc:-1%"
ffmpeg -i "%strc%" -c copy -bsf:a aac_adtstoasc Output.mp4
Run Code Online (Sandbox Code Playgroud) 因此,对于我当前困境的第二部分,我有一个文件夹列表c:\file_list.txt.我需要能够根据行号提取它们(好吧,用一些mod回显它们),因为这个批处理脚本是由迭代宏进程调用的.我将行号作为参数传递.
@echo off
setlocal enabledelayedexpansion
set /a counter=0
set /a %%a = ""
for /f "usebackq delims=" %%a in (c:\file_list.txt) do (
if "!counter!"=="%1" goto :printme & set /a counter+=1
)
:printme
echo %%a
Run Code Online (Sandbox Code Playgroud)
这给了我一个输出%a.卫生署!所以,我试过回声!a!(结果 :) ECHO is off.; 我试过回声%a(结果:a)
我认为很容易做的就是修改head.bat这里找到的代码:
Windows批处理命令从文本文件读取第一行,
而不是回显每一行 - 我只是回显最后一行找到的.并不像人们想象的那么简单.我注意到我的柜台由于某种原因停留在零; 我想知道这是否set /a counter+=1正在做我认为它正在做的事情.
我有一个批处理文件(在Windows XP中,激活了命令扩展名),其中包含以下行:
for /f %%s in ('type version.txt') do set VERSION=%%s
Run Code Online (Sandbox Code Playgroud)
在某些计算机上,它运行正常(如此SO问题所示),但在其他计算机上它会杀死cmd(控制台窗口刚刚关闭)
为什么?
注意:计算机似乎有类似的配置:XpSP2,用户具有管理权限,HKEY_CURRENT_USER\Software\Microsoft\Command Processor中没有定义"命令处理器"...
我正在寻找一个带有文件的DOS批处理程序:
First input line
Second input line
Third input line...
Run Code Online (Sandbox Code Playgroud)
并输出"第一输入线"
我在将文件中的输入重定向到 set/p 时遇到问题
\n\n这是我的脚本:
\n\n@echo off\necho Reading: {%1}\ntype %1\necho(\necho Starting...\nset VAR=\nset /P VAR=<%1\necho VAR is {%VAR%}...\nRun Code Online (Sandbox Code Playgroud)\n\n我在其他地方读过(/sf/answers/547907041/),我正在使用的语法将起作用。它不是!
\n\n这是我的输出:
\n\nReading: {Fruit.txt}\nPears\nApples\nOranges\nKiwi\nGrapes\nKumquat\n\nStarting...\nVAR is {\xc2\xa0\xe2\x96\xa0P}...\nRun Code Online (Sandbox Code Playgroud)\n\n那么 - 给出了什么?
\n