标题: [文件操作] [已解决]拖入WAV并播放的批处理错在哪里? [打印本页]
作者: aries215 时间: 2010-10-15 09:04 标题: [已解决]拖入WAV并播放的批处理错在哪里?
player.exe 是一个命令行播放器,只支持WAV格式。我想做个批处理,拖入后播放。- @echo off
- :start
- cls
- setlocal enabledelayedexpansion
- echo.
- set /p "File=请拖入WAV文件:"
- for /f "delims=" %%i in ("%File%") do set "name=%%~ni"
- if exist %name%.wav goto play
- goto start
- :play
- title %name%
- player.exe %File%
- endlocal
- goto start
复制代码
我拖入正确的音频文件时,还是跳回到开始。没有中间的goto跳转就可以正确播放,但拖入不支持的格式的话,会出现播放器错误提示。
判断文件后缀的方法,怎么写才更简洁有效??
谢谢!
[ 本帖最后由 aries215 于 2010-10-20 21:28 编辑 ]
作者: yangfengoo 时间: 2010-10-15 09:17
把 set "name=%%~ni"
改为set "name=%%~fni"
试试
作者: TX_kakashi 时间: 2010-10-15 09:18
- if "%%~xi"==".wav" goto play
复制代码
作者: aries215 时间: 2010-10-15 09:20
楼上两个都试了,还是不行,拖入正确的文件还会跳回到 start 处,无法播放~
[ 本帖最后由 aries215 于 2010-10-15 09:23 编辑 ]
作者: aries215 时间: 2010-10-15 09:27 标题: 回复 3楼 的帖子
这个%~xi后缀应该不带 . 号的吧?
作者: TX_kakashi 时间: 2010-10-15 09:27
你插的位置对不对?加在for循环里面
作者: aries215 时间: 2010-10-15 09:32 标题: 大哥,你还是帮我弄个完整的吧
我的是(删掉 Set 一句,感觉不通顺了):
@echo on
:start
cls
setlocal enabledelayedexpansion
echo.
set /p "File=请拖入WAV文件:"
for /f "delims=" %%i in ("%File%") do if "%%~xi"=="wav" goto play
goto start
:play
title %name%
player.exe %File%
endlocal
goto start
作者: TX_kakashi 时间: 2010-10-15 09:34
- @echo off
- cls
- setlocal enabledelayedexpansion
- echo.
- set /p "File=请拖入WAV文件:"
- for /f "delims=" %%i in ("%File%") do (
- if "%%~xi"==".wav" (
- title [%%~ni]
- player.exe "%File%"
- ) else (echo 文件类型错误)
- )
- pause>nul
- cls&%0
复制代码
[ 本帖最后由 TX_kakashi 于 2010-10-15 09:37 编辑 ]
作者: aries215 时间: 2010-10-15 09:43 标题: 很热心的高手!
行了,满意!
又帮我一回!
非常感谢!
这个播放器在这里:
http://bbs.erji.com/read.php?fid=125&tid=923120
作者: cjiabing 时间: 2010-10-15 09:54
批处理判断输入类型 http://www.bathome.net/thread-9555-1-1.html
界面拖入没有意义吧?拖入多个只能显示一个,用FOR是多余的。
要支持拖入多个需要把文件拖入程序图标就可以了。
批处理版音视频播放器 :http://www.bathome.net/thread-9556-1-1.html
[ 本帖最后由 cjiabing 于 2010-10-15 09:59 编辑 ]
作者: aries215 时间: 2010-10-15 10:07 标题: 回复 10楼 的帖子
谢谢LS提示,正在研习!
作者: aries215 时间: 2010-10-15 10:16
我提到的播放器在这里:
http://bbs.erji.com/read.php?fid=125&tid=923120
不同的播放器,音质是不一样的。
你那个批处理的确强大,对我这个播放器的帮助应该主要是可以支持拖入多个文件吧?具体可以怎么改呢?
谢谢!
作者: cjiabing 时间: 2010-10-15 10:25
哈哈,国家机密的哦!~
算了,从现在起解密:-
- @echo off
- setlocal enabledelayedexpansion
- set tsr=%*
- if defined tsr (
- for /f "tokens=*" %%a in ("!tsr!") do (
- for %%i in (%%a) do if exist %%i echo %%~i
- )
- )
- pause
复制代码
不过要判断wav不好进行,自己试试吧,实在不得你就用findstr /v ".wav"。
[ 本帖最后由 cjiabing 于 2010-10-15 10:44 编辑 ]
作者: aries215 时间: 2010-10-15 10:31
哎~
我(现在用8楼的代码)拖个中文名的文件,窗口一闪就没了,不知什么原因,可能是播放器不支持,完全看不清提示!
[ 本帖最后由 aries215 于 2010-10-15 10:35 编辑 ]
作者: aries215 时间: 2010-10-15 10:34 标题: 回复 13楼 的帖子
你这个居然有中文的括号 - - !
窗口一闪就没有了,完全没办法拖放文件!
[ 本帖最后由 aries215 于 2010-10-15 10:36 编辑 ]
作者: cjiabing 时间: 2010-10-15 10:45
不好意思,没试过,直接写上去的,现在可以用了,不用磕头拜谢了!~
作者: aries215 时间: 2010-10-15 10:59 标题: 回复 16楼 的帖子
呃~ 好像还有问题,如果去掉“pause”,双击批处理后,CMD窗口一闪就就没了。
我不会复杂的批处理,你有空的时候帮我写个完整的吧~!嘻嘻~
[ 本帖最后由 aries215 于 2010-10-15 11:02 编辑 ]
作者: aries215 时间: 2010-10-15 11:11
那个命令行工具应该不支持连续播放的,放完就停在那里了,感觉TX_kakashi 兄的代码已经很好用了。
作者: cjiabing 时间: 2010-10-15 11:46 标题: 回复 17楼 的帖子
真服了你了,去掉pause不是直接退出了嘛?那肯定一闪而过啊!~
假如你拖入的只是一个文件可能直接播放,假如你拖入的是一大堆东西你肯定还得用for才能逐个取出来,你都没深入尝试怎么就说一闪而过了呢?
算了,我也一闪而过吧!~
作者: aries215 时间: 2010-10-15 12:10
不去掉pause,双击后直接显示“请按回车键继续...”,去掉后窗口一闪就没了,我都没机会拖入任何文件。
我一直都只是测试单个文件。也许你提供的代码还要修改才能用的,这对于我来说有难度,所以没办法深入尝试。
占用你的时间不好意思!
作者: aries215 时间: 2010-10-15 12:13
以我有限的水平,你这个批处理应该能实现:显示所拖入的文件。
可是我使用的结果是,窗口一闪就没了,我根本没机会拖入文件。
我承认我不会修改~
作者: cjiabing 时间: 2010-10-15 13:02
送佛送到西,好人做到底吧!~
-
- @echo off
- setlocal enabledelayedexpansion
- set tsr=%*
- if defined tsr (
- for /f "tokens=*" %%a in ("!tsr!") do (
- for %%i in (%%a) do if exist %%i title "%%~i"&player.exe "%%~i"
- )
- )
- pause
复制代码
我还是没试过,你试了再跟我说。
作者: cjiabing 时间: 2010-10-15 13:03
再强调一下,是拖拉至程序图标,不是拖拉至打开的窗口!~
作者: aries215 时间: 2010-10-18 11:07
多谢楼上的耐心,我明白了。
但是结果还是一样,无法播放。
作者: aries215 时间: 2010-10-19 21:05 标题: 问题没有完全解决
用的是8楼的代码。
问题是这个脚本不支持特殊文件名:
1、带空格的话会显示找不到文件(连错误提示也是乱码!),我发现改用ECHO命令会看见实际用了两次双引号;
2、带特殊符号的话拖入后一回车CMD窗口就消失!
求修正
作者: aries215 时间: 2010-10-19 21:21 标题: 回复 22楼 的帖子
这种拖入方法不通用吧?用“ECHO”命令可以,但具体换成“yoyotu.exe”播放器就不行了。
提示:
'yoyotu.exe' 不是内部或外部命令,也不是可运行的程序或批处理文件。
[ 本帖最后由 aries215 于 2010-10-19 21:23 编辑 ]
作者: cjiabing 时间: 2010-10-19 22:29 标题: 回复 26楼 的帖子
本,换成程序完整路径名,你换成“yoyotu.exe”肯定不行啊!~
作者: aries215 时间: 2010-10-20 00:55
改成下面这样就成功了:- @echo off
- :start
- cls
- echo.
- setlocal ENABLEDELAYEDEXPANSION
- set /p File=请拖入WAV文件:
- if defined File (
- for /f "tokens=*" %%a in ("!File!") do (
- for %%i in (%%a) do if "%%~xi"==".wav" "%~dp0yoyotu.exe" "ASIO4ALL v2" "%%~i"
- )
- )
- endlocal
- goto start
复制代码
因为音乐文件位于好几个不同的目录,拖入图标的话有时候有点麻烦,所以改成拖入窗口的方式。
作者: aries215 时间: 2010-10-20 21:31
不知道我上面这样写有没有语法问题?
作者: cjiabing 时间: 2010-10-20 21:50 标题: 回复 29楼 的帖子
你厉害!~教教我怎么把多个文件同时拖入窗口(非程序图标)?
作者: aries215 时间: 2010-10-21 00:30
播放器本身不支持批量播放,前面已经提到。
用你前面的代码试过,放完第一首就停在那里了,不支持批量播放。所以不考虑这个多文件的情况,它本身就是特意为音质而生,第一版,麻烦一点也算了。
哎~ 你没下载那个播放器(没毒的,但要ASIO支持),你只是理论上说而已。
[ 本帖最后由 aries215 于 2010-10-22 11:47 编辑 ]
作者: aries215 时间: 2011-11-12 08:17
多年以后回来看看, 觉得"cjiabing"的拖拉至批处理图标的代码很好用, 很方便!
谢谢!!
作者: cjiabing 时间: 2011-11-12 09:32
呵呵,不好意思,当时说话不够耐心,其实这个东西不是很难的,看看高手的代码就知道了。
作者: CrLf 时间: 2011-11-12 23:43
话说拖入多条路径到窗口可以试试 more<con
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |