找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24111|回复: 3

[文件操作] 求助批处理中将带括号的文件名赋值到for语句的变量的问题

[复制链接]
发表于 2012-9-25 13:55:27 | 显示全部楼层 |阅读模式
本帖最后由 xfs123 于 2012-9-25 15:59 编辑

想用ffmpeg.exe批量将h.264/aac的mkv视频文件转成mp4格式。具体是想将多个文件直接拖到.bat图标上,读取各文件路径,启用ffmpeg,复制视频流和音频流。代码如下:
  1. @echo off
  2. for %%a in (%*) do ffmpeg.exe -i %%a -vcodec copy -acodec copy -y %%~dpna.mp4
  3. pause
复制代码
发现将带括号的文件名拖进来会直接一闪而过,好像批处理会将文件名括号内的内容识别为一个指令。

该用usebackq或者变量延迟什么的吧,自己尝试了许久还是不行,麻烦论坛上的大牛指导下了,谢谢。

还有仅仅
  1. @echo off
  2. for %%a in (%*) do echo %%a
  3. pause
复制代码
就会有问题哎
发表于 2012-9-25 17:01:43 | 显示全部楼层
  1. @echo off
  2. call :a %*
  3. pause
  4. :a
  5. if "%~1" neq "" echo %~1&shift&goto :a
复制代码
会丢弃路径中的%符号
 楼主| 发表于 2012-9-25 19:19:36 | 显示全部楼层
会丢弃路径中的%符号
apang 发表于 2012-9-25 17:01



修改了下,可行:
  1. @echo off
  2. call :a %*
  3. goto :end
  4. :a
  5. if "%~1" neq "" f:\ffmpeg\bin\ffmpeg.exe -i "%1" -vcodec copy -acodec copy -y "%~dpn1.mp4"&shift&goto :a
  6. :end
复制代码
只是末尾不能添加pause了,否则每循环一次就要暂停下。。。
发表于 2012-9-25 19:39:44 | 显示全部楼层
有讨论过 %* 中含特殊字符致错的情况:
http://bbs.bathome.net/thread-7509-1-1.html
除了脚本运行前已发生错误的特殊情况,其余都可避免,这里给出一个针对楼主需求而修改的方案:
  1. @echo off
  2. set str=%*
  3. setlocal enabledelayedexpansion
  4. set str= !str:^"=!
  5. for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do set "str=!str: %%a:=" "%%a:!"
  6. for /f "delims=" %%a in (^"!str:~2!"") do endlocal&echo %%a
  7. pause
复制代码
方案原形和另一个方案见:
http://bbs.bathome.net/redirect. ... 4&fromuid=30406
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 14:24 , Processed in 0.017872 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表