[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[已解决]批处理文件替换变量为空怎么就变身为文件夹了?

这是题目http://bathome.net/thread-14993-1-1.html
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /ad /b /s B\*') do (
  4. set /a a+=1
  5. set !a!=%%a
  6. echo !a!=%%a
  7. )
  8. set /p n=请输入
  9. set /a aa=!n!*!a!
  10. for /f "delims=" %%a in ('dir /a-d /b /s A\*.*') do (
  11. set /a b+=1
  12. set /a c+=1
  13. if "!c!" gtr "!a!" set c=1
  14. call :a "%%a"
  15. if !b! == !n! pause&exit
  16. )
  17. :a
  18. move %1 "!%c:"=%!"
  19. goto :eof
复制代码
第18段!中的"!%c:"=%!"不懂!
我知道单独的“%c:"=%”这是把变量c里的"去掉!但是代码中外面加  !!  干什么?例外这代码怎么就成了目录了?
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
本人已死!不用联系!~
要联系下来联系!~~

TOP

!%c:"=%!
把%c%中的 " 替换成 %

TOP

回复 2# canyuexiaolang
错了吧!
本人已死!不用联系!~
要联系下来联系!~~

TOP

如果把@echo off删掉,执行过程中,18行如何显示?
1

评分人数

    • CrLf: 乐于助人PB + 3

TOP

回复 4# awk
他的执行结果就是dir /s /ad /b d\*  这个执行结果!只是他是1个1个用有点象for例如:
move 1.txt 1
move 2.txt a
本人已死!不用联系!~
要联系下来联系!~~

TOP

可以说你不明白%的意义,在18行中%实际上比!要好(出于效率),但是%还有脱义的作用(也就是常说的转义),可以的话你可以试一下用%来代替!,看看结果
1

评分人数

    • CrLf: 乐于助人PB + 3
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

我是来围观楼上的。

TOP

楼主可能对类似思路见得相对较少,所以有此一问。
第一个 for 先将所有目录名称赋给一个变量,变量名称是序号,序号每循环加 1,如果我没说清楚,那在第 7、8 两行间 set|more 一下就知道了。
看懂第一个 for 之后,代码的思路就很清晰了,只是引用序号对应的文件夹名而已。
第二个 for 其实其实也是同理,不过它只需引用 %%a 而不需要赋值给对应的序号。

%c:"=% 貌似写成 %c% 也可以,因为 %c% 本身就是纯数字,所以 !%c%! 的意思就是取 %c% 值对应的变量值(即第一个 for 中设置的文件夹名)
1

评分人数

    • jellyhk: 终于勉强明白了!技术 + 1

TOP

返回列表