Board logo

标题: [文件操作] [已解决]拖入WAV并播放的批处理错在哪里? [打印本页]

作者: aries215    时间: 2010-10-15 09:04     标题: [已解决]拖入WAV并播放的批处理错在哪里?

player.exe 是一个命令行播放器,只支持WAV格式。我想做个批处理,拖入后播放。
  1. @echo off
  2. :start
  3. cls
  4. setlocal enabledelayedexpansion
  5. echo.
  6. set /p "File=请拖入WAV文件:"
  7. for /f "delims=" %%i in ("%File%") do set "name=%%~ni"
  8. if exist %name%.wav goto play
  9. goto start
  10. :play
  11. title %name%
  12. player.exe %File%
  13. endlocal
  14. 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

  1. 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

  1. @echo off
  2. cls
  3. setlocal enabledelayedexpansion
  4. echo.
  5. set /p "File=请拖入WAV文件:"
  6. for /f "delims=" %%i in ("%File%") do (
  7.      if "%%~xi"==".wav" (
  8.        title [%%~ni]
  9.        player.exe "%File%"
  10.       ) else (echo 文件类型错误)     
  11. )
  12. pause>nul
  13. 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

哈哈,国家机密的哦!~
算了,从现在起解密:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set tsr=%*
  4. if defined tsr (
  5. for /f "tokens=*" %%a in ("!tsr!") do  (
  6.     for  %%i in (%%a) do if exist %%i echo %%~i   
  7. )                                 
  8. )
  9. 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

送佛送到西,好人做到底吧!~
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set tsr=%*
  4. if defined tsr (
  5. for /f "tokens=*" %%a in ("!tsr!") do  (
  6.     for  %%i in (%%a) do if exist %%i title "%%~i"&player.exe "%%~i"  
  7. )                                 
  8. )
  9. 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

改成下面这样就成功了:
  1. @echo off
  2. :start
  3. cls
  4. echo.
  5. setlocal ENABLEDELAYEDEXPANSION
  6. set /p File=请拖入WAV文件:
  7. if defined File (
  8. for /f "tokens=*" %%a in ("!File!") do (
  9. for  %%i in (%%a) do if "%%~xi"==".wav" "%~dp0yoyotu.exe" "ASIO4ALL v2" "%%~i"
  10. )
  11. )
  12. endlocal
  13. 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://bbs.bathome.net/) Powered by Discuz! 7.2