首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理仅对特定扩展执行

批处理仅对特定扩展执行
EN

Stack Overflow用户
提问于 2015-03-28 02:22:42
回答 1查看 43关注 0票数 0

我真的对我在这里做的事情没有很深的理解,但问题是我不能让它只适用于某些文件类型

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 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应该做什么,或者您想对srtsub文件做什么

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29307633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档