我对我在这里所做的事情并没有非常深刻的了解,但事实是我不能让它适用于某种文件类型
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。
我想要做的只是接受.srt和.sub文件,当它复制名称以附加原始扩展名时,并不总是.srt。
答案 0 :(得分:0)
从根本上说,FOR %%2...
和类似的错误。
元变量(循环控制变量 - 您尝试使用2
)必须是字母和,字母字符区分大小写(少数几个中的一个)表示区分大小写的批次。)
在for
循环中引用该值时,请使用%%x
(其中x
是您选择的元变量。)
%n
其中n
为1..9表示提供给例程的参数n
,因此%1
表示给予此例程的第一个参数'所以 thisroutine somethingelse 将something
视为参数1而somethingelse
视为参数2,分别由%1
和%2
引用。
更正后,您的第一行将从所选的掩码name
中依次分配每个文件名的(*.mp4,*.avi,*mkv)
部分,并将找到的最后一个此类名称的名称部分分配给变量fname
。
同样,您的第二个for
循环将查找所有.srt
和.sub
文件,删除所有只读属性,等待,使用整个名称运行您的cscript(名称+扩展名) )找到*.srt
或*.sub
,然后尝试将该文件重命名为在第一个循环中找到的名称 .srt - 因为这是您指定的内容
所有这一切的结果是第一个循环将找到zzz.mkv
(如果这是第一个循环中找到的最后一个文件名)并将zzz
分配给fname
。
第二个循环会将找到的第一个.srt
或.sub
文件重命名为zzz.srt
,由于该文件名现在存在,因此无法重命名所有剩余的.srt
和.sub
个文件 - 包括zzz.srt
。
当你修改元数据时,你的代码应该尝试做什么。它可能不是您想要它做的,但您还没有提供示例,如果有多个(*.mp4,*.avi,*mkv)
文件或您的文件,您还没有明确说明该怎么做提供文件名时应该cscript
,或者您要对srt
和sub
个文件做什么