Batch file 批处理仅对某些扩展执行

Batch file 批处理仅对某些扩展执行,batch-file,rename,file-extension,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 ) 因此,它所做的是,它

我对我在这里所做的事情并没有非常深刻的理解,但问题是我不能让它只适用于特定的文件类型

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中,当我右键单击Send to MyBatch时,它会在单击的文件目录中搜索MP4、AVI、MKV,将其名称复制到我的文件并附加.srt


我希望它只接受.srt和.sub文件,当它复制名称以附加原始扩展名时,并不总是.srt。

基本上,
对于%%2…
和类似的错误

元变量(循环控制变量-您尝试使用的
2
)必须是字母,并且字母字符区分大小写(批量中少数几个显示区分大小写的PLAC之一)

循环的
中引用值时,请使用
%%x
(其中
x
是您选择的元变量。)

%n
其中
n
为1..9表示提供给例程的参数
n
,因此
%1
表示“给定给该例程的第一个参数”,因此该例程将某物某物某物视为参数1,将
某物某物某物某物某物某物某物某物某物某物某物某物某物某物某物某物某物某物某物某物作为参数2,分别由
%1
%2
引用

更正后的第一行将依次从所选掩码
(*.mp4,*.avi,*mkv)
中找到每个文件名的
名称
部分,最后找到的此类名称的名称部分将分配给变量
fname

类似地,您的第二个
for
循环将查找所有
.srt
.sub
文件,删除任何只读属性,等待,使用找到的
*.srt
*.sub
的完整名称(名称+扩展名)运行cscript,然后尝试将该文件重命名为在第一个loop.srt中找到的名称,因为这是您指定的名称

所有这一切的结果是,第一个循环将定位
zzz.mkv
(如果这是在第一个循环中找到的最后一个文件名),并将
zzz
分配给
fname

第二个循环将第一个
.srt
.sub
文件重命名为
zzz.srt
,并且由于该文件名现在存在,将无法重命名所有剩余的
.srt
.sub
文件-包括
zzz.srt


当元变量被修复时,您的代码应该尝试这样做。这可能不是您想要它做的,但是您没有提供一个示例,并且您没有清楚地解释如果有多个
(*.mp4,*.avi,*mkv)
文件,您的
cscript
在提供文件名时应该做什么,或者你想对
srt
sub
文件做些什么

我会尽量解释得更好:一个文件夹中只有一个srt/sub和一个mp4/mkv/avi。右键单击srt/子文件、发送到、批处理。批处理采用avi/mkv/mp4的名称,重命名str/sub文件,然后将sub发送到替换sub中某些字符的脚本。