batch仅针对特定扩展名执行

时间:2015-03-27 18:22:42

标签: batch-file rename file-extension

我对我在这里所做的事情并没有非常深刻的了解,但事实是我不能让它适用于某种文件类型

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。

1 个答案:

答案 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,或者您要对srtsub个文件做什么