Board logo

标题: [文件操作] 【已解决】批处理 拖动文件到窗口 后续执行错误...求解 [打印本页]

作者: comicguests    时间: 2014-2-11 11:23     标题: 【已解决】批处理 拖动文件到窗口 后续执行错误...求解

本帖最后由 comicguests 于 2014-2-12 06:44 编辑
  1. @rem ----- ExeScript Options Begin -----
  2. @rem ScriptType: console,invoker
  3. @rem DestDirectory: temp
  4. @rem ----- ExeScript Options End -----
  5. @echo off
  6. :lab1
  7. cls
  8. color 2f
  9. echo.
  10. echo 【 更改文件(文件夹)属性】
  11. echo -------------------------------
  12. echo.
  13. echo.
  14. echo.
  15. echo.
  16. echo.
  17. set Choice=
  18. echo 请将要更改的文件(文件夹)直接拖入本窗口,然后回车:
  19. echo.
  20. set /p Doc=
  21. if ""%Doc%"" == "" goto lab1
  22. echo a..........(+)只读文件属性
  23. echo b..........(+)存档文件属性
  24. echo c..........(+)系统文件属性
  25. echo d..........(+)隐藏文件属性
  26. echo e..........(-)只读文件属性
  27. echo f..........(-)存档文件属性
  28. echo g..........(-)系统文件属性
  29. echo h..........(-)隐藏文件属性
  30. echo.
  31. set /p CHS=     请输入您的选择:
  32. echo.
  33. if "%CHS%"=="a" goto addR
  34. if "%CHS%"=="b" goto addA
  35. if "%CHS%"=="c" goto addS
  36. if "%CHS%"=="d" goto addH
  37. if "%CHS%"=="e" goto subR
  38. if "%CHS%"=="f" goto subA
  39. if "%CHS%"=="g" goto subS
  40. if "%CHS%"=="h" goto subH
  41. goto lab1
  42. :addR
  43. attrib ""%Doc%"" +r
  44. :addA
  45. attrib ""%Doc%"" +a
  46. :addS
  47. attrib ""%Doc%"" +s
  48. :addH
  49. attrib ""%Doc%"" +h
  50. :subR
  51. attrib ""%Doc%"" -r
  52. :subA
  53. attrib ""%Doc%"" -a
  54. :subS
  55. attrib ""%Doc%"" -s
  56. :subH
  57. attrib ""%Doc%"" -h
  58. exit
复制代码
不知道哪里出错了,希望各位指教
作者: DAIC    时间: 2014-2-11 13:05

把 @echo off 删掉
把报错信息发出来看看
作者: comicguests    时间: 2014-2-11 14:32

回复 2# DAIC
  1. c:\>color 2f
  2. c:\>echo.
  3. c:\>echo                【 更改文件(文件夹)属性】
  4.                 【 更改文件(文件夹)属性】
  5. c:\>echo                 -------------------------------
  6.                  -------------------------------
  7. c:\>echo.
  8. c:\>echo.
  9. c:\>echo.
  10. c:\>echo.
  11. c:\>echo.
  12. c:\>set Choice=
  13. c:\>echo        请将要更改的文件(文件夹)直接拖入本窗口,然后回车:
  14.         请将要更改的文件(文件夹)直接拖入本窗口,然后回车:
  15. c:\>echo.
  16. c:\>set /p Doc=
  17. C:\Users\c\Desktop\test
  18. c:\>if ""C:\Users\c\Desktop\test"" == "" goto lab1
  19. c:\>echo        a..........(+)系统文件属性
  20.         a..........(+)系统文件属性
  21. c:\>echo        b..........(+)隐藏文件属性
  22.         b..........(+)隐藏文件属性
  23. c:\>echo        c..........(+)存档文件属性
  24.         c..........(+)存档文件属性
  25. c:\>echo        d..........(+)只读文件属性
  26.         d..........(+)只读文件属性
  27. c:\>echo        e..........(-)系统文件属性
  28.         e..........(-)系统文件属性
  29. c:\>echo        f..........(-)隐藏文件属性
  30.         f..........(-)隐藏文件属性
  31. c:\>echo        g..........(-)存档文件属性
  32.         g..........(-)存档文件属性
  33. c:\>echo        h..........(-)只读文件属性
  34.         h..........(-)只读文件属性
  35. c:\>echo.
  36. c:\>set /p CHS=     请输入您的选择:
  37. 请输入您的选择:b
  38. c:\>echo.
  39. c:\>if "b" == "a" goto addR
  40. c:\>if "b" == "b" goto addA
  41. c:\>attrib ""C:\Users\c\Desktop\test"" +a
  42. c:\>attrib ""C:\Users\c\Desktop\test"" +s
  43. c:\>attrib ""C:\Users\c\Desktop\test"" +h
  44. 未重置系统文件 - C:\Users\c\Desktop\test
  45. c:\>attrib ""C:\Users\c\Desktop\test"" -r
  46. 未重置系统文件 - C:\Users\c\Desktop\test
  47. c:\>attrib ""C:\Users\c\Desktop\test"" -a
  48. 未重置系统文件 - C:\Users\c\Desktop\test
  49. c:\>attrib ""C:\Users\c\Desktop\test"" -s
  50. c:\>attrib ""C:\Users\c\Desktop\test"" -h
  51. c:\>pause
  52. 请按任意键继续. . .
复制代码

作者: comicguests    时间: 2014-2-11 14:33

回复 2# DAIC


显示    未重置系统文件   怎么办?
作者: DAIC    时间: 2014-2-11 17:53

回复 4# comicguests


微软的官方文档说的很清楚:
如果文件设置了系统或隐藏属性,则为了更改该文件的其他属性,您必须首先清除其系统或隐藏属性。

作者: battab    时间: 2014-2-12 10:52

回复 1# comicguests


    第42行“goto set” 却没发现有:set 标签在哪。
作者: comicguests    时间: 2014-2-12 11:13

本帖最后由 comicguests 于 2014-2-12 04:17 编辑

回复 5# DAIC


    确定没加任何额外属性,是新建的文件夹,测试用...

而且问题知道出在哪了...批处理的描述对应错了,但不会失败,问题出在我用的资源管理器上,我用的是Total Commander,对虚拟桌面处理的不太好,才导致的问题,使用真实路径就没问题了...真是十分抱歉!!!


抱歉再问一下,怎样多选?,比如按下ad,就会加上两种属性?
作者: comicguests    时间: 2014-2-12 11:14

回复 6# battab


    感谢提示,已改!!
作者: ivor    时间: 2014-2-12 11:53

本帖最后由 ivor 于 2014-2-12 11:58 编辑

每个标签后面没有goto :EOF或者 goto :lab1


判断语句建议用
  1. echo %CHS% | find "a" && goto addR
复制代码
按照这个格式后面的自己改

if "%CHS%"=="a" goto addR
if "%CHS%"=="b" goto addA
if "%CHS%"=="c" goto addS
if "%CHS%"=="d" goto addH
if "%CHS%"=="e" goto subR
if "%CHS%"=="f" goto subA
if "%CHS%"=="g" goto subS
if "%CHS%"=="h" goto subH
作者: comicguests    时间: 2014-2-12 13:45

回复 9# ivor


    感谢,学习了!
作者: DAIC    时间: 2014-2-12 13:49

回复 9# ivor


    判断语句改成这样有什么好处吗?
作者: ivor    时间: 2014-2-12 15:26

回复 11# DAIC


    兼容性好,不管你输入多少种组合,只要包含a,b,c,d,e,f,h都会执行对应的子程序(标签),
作者: DAIC    时间: 2014-2-12 15:52

回复 12# ivor


这样不太严谨把,比如可以输入非法的选项 az




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