我真的对我在这里做的事情没有很深的理解,但问题是我不能让它只适用于某些文件类型
FOR %%2 in (*.mp4,*.avi,*mkv) do set fname=%%~n2
FOR %%1 in (*.srt,*.sub) do (
attrib -r %1
PING 1.1.1.1 -n 1 -w 1000 > NUL
cscript "NewReplace.vbs" %1
ren %1 "%fname%".srt
)因此,它所做的是,这是位于%appdata%\Microsoft\Windows\SendTo,当我右键单击-发送到-MyBatch时,它会在单击的文件目录中搜索MP4、AVI、MKV,将其名称复制到我的文件中并附加.srt。
我希望IT只接受.srt和.sub文件,并且当它复制名称以附加原始扩展名时,并不总是.srt。
发布于 2015-03-28 02:51:45
从根本上说,FOR %%2...和类似的都是错误。
元变量(循环控制变量--您曾尝试使用2)必须是字母表和,字母字符区分大小写(这是批处理中为数不多的区分大小写的字符之一)。
在for循环中引用该值时,请使用%%x (其中x是您选择的元变量)。
%n其中n是1..9表示提供给例程的参数n,因此%1表示“提供给此例程的第一个参数”,因此其他人会将something视为参数1,将somethingelse视为参数2,分别由%1和%2引用。
更正后,第一行将依次分配从所选掩码(*.mp4,*.avi,*mkv)中找到的每个文件名的name部分,并将找到的最后一个文件名的名称部分分配给变量fname。
类似地,第二个for循环将查找所有.srt和.sub文件,删除所有只读属性,等待,使用找到的*.srt或*.sub的完整名称(name+extension)运行cscript,然后尝试将该文件重命名为在第一个loop.srt中找到的名称-因为这是您指定的名称。
所有这一切的结果是,第一个循环将定位zzz.mkv (如果这是第一个循环中找到的最后一个文件名),并将zzz分配给fname。
第二个循环会将找到的第一个.srt或.sub文件重命名为zzz.srt,由于该文件名现在存在,因此无法重命名所有剩余的.srt和.sub文件-包括zzz.srt。
当元变量被修复时,这就是你的代码应该尝试做的事情。这可能不是您希望它做的事情,但是您没有提供示例,也没有清楚地解释如果有多个(*.mp4,*.avi,*mkv)文件该怎么办,或者当提供了一个文件名时cscript应该做什么,或者您想对srt和sub文件做什么
https://stackoverflow.com/questions/29307633
复制相似问题