Board logo

标题: [文件操作] 批处理 for语句不执行? [打印本页]

作者: lengyff    时间: 2019-3-14 20:54     标题: 批处理 for语句不执行?

  1. @echo off
  2. mkdir out
  3. for /r .\原件 %%B in (*.jpg) do magick convert "%%B" -define jpeg:extent=300kb "out/%%B"
复制代码
这个语句怎么不能正常执行呢?
magick convert 为imagemagic的转换语句。
作者: Batcher    时间: 2019-3-14 21:00

把 @echo off 删掉
假设代码的完整路径为 C:\test.bat
打开一个CMD窗口,执行命令:
C:\test.bat

这样可以看到详细的报错信息或者线索
作者: zaqmlp    时间: 2019-3-14 22:44

  1. @echo off
  2. title 互助互利,扫码头像,感谢赞助;有什么问题,可加QQ956535081及时沟通
  3. cd /d "%~dp0"
  4. md ".\out\" 2>nul
  5. for /r ".\原件" %%b in (*.jpg) do (
  6.     echo;"%%b"
  7.     magick convert "%%b" -define jpeg:extent=300kb ".\out\%%~nxb"
  8. )
  9. pause
复制代码

作者: lengyff    时间: 2019-3-14 23:18

回复 2# Batcher


    谢谢,我试试去。
作者: lengyff    时间: 2019-3-14 23:20

回复 3# zaqmlp

增设了参数,应该行,谢谢你。
作者: lengyff    时间: 2019-3-15 20:56

回复 3# zaqmlp


有效果!
作者: lengyff    时间: 2019-3-15 20:57

回复 2# Batcher

原来还有这种调试批处理的方法,大开眼界,执行过程一目了然,再次谢谢!
作者: lengyff    时间: 2019-3-17 22:21

本帖最后由 lengyff 于 2019-3-17 22:32 编辑

再次更新:

批处理编写注意事项
1、中文编码问题常常会直接影响bat的执行,事半功倍。
        用其它编辑器编写代码时,建议用Emeditor高版本,直接更改语言和编码分别为bat和GB2312中文,编写的代码也许用记事本打开时,中文会显示乱码,但是拖到emeditor中显示就是正常的,一点儿都不影响执行效果!
        一般不推荐用记事本编写程序,非用用记事本编写时,为支持中文防止乱码,建议保存为ANSI格式。
        notepad++更改为GB2312后,重新拖入后,又变成了utf8格式,所以也不建议使用。
2、for %%i中的i在大小写方面敏感,建议同一个变量名称,前后大小写一致。
3、输出文件名保存时,建议使用%%~nx0等类似扩展,成功率比较高,可以用echo;"%%b"、"%%~nxb"测试值是否正确。。
4、重要的事情说三遍!!!
建议选择emeditor作为批处理编辑器,更改语言和编码分别为bat和GB2312中文!!!
建议选择emeditor作为批处理编辑器,更改语言和编码分别为bat和GB2312中文!!!
建议选择emeditor作为批处理编辑器,更改语言和编码分别为bat和GB2312中文!!!

原来的例子可以修改为如下测试代码:
  1. @echo off
  2. mkdir out
  3. for /r ".\原件" %%B in (*.jpg) do (
  4. echo;"%%B"
  5. magick convert "%%B" -define jpeg:extent=300kb "out/%%B"
  6. echo;"out/%%B"
  7. rem 明显可见"out/%%B"为整个路径名称,无法存入。echo真是个好东东!!!
  8. )
  9. pause
复制代码
发现测试错误后,引入%0变量修改为:
  1. @echo off
  2. mkdir out
  3. for /r ".\原件" %%B in (*.jpg) do (
  4. echo;"%%B"
  5. magick convert "%%B" -define jpeg:extent=300kb "out/%%~nxB"
  6. echo;"out/%%~nxB"
  7. rem 明显可见"out/%%B"为整个路径名称,无法存入。echo真是个好东东!!!
  8. )
  9. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2