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

[文件操作] 【已解决】重命名文件夹的BAT代码,不能按预期执行

本帖最后由 cntanglang 于 2021-11-15 14:26 编辑

这段代码
  1. if exist "%%b" ( ( MOVE /Y "%%b" "%%b.Ray" ) || (( ATTRIB -S -H -R "%%b" ) & ( MOVE /Y "%%b" "%%b.Ray" )) || ( ( RD /S /Q "%%b.Ray" ) & ( MOVE /Y "%%b" "%%b.Ray" )) )
复制代码
在执行中发现,无法按照预期执行: 如果目录b 存在,先重命名为 b.Ray;如果重命名出错,则 去掉目录b的SHR属性后再重命名;如果还是出错,则删除目录b.Ray后再重命名。

实际执行发现,如果目录b具有隐藏属性,则代码报错结果为:
  1. 系统找不到指定的文件。
  2. 系统找不到指定的文件。
  3. 系统找不到指定的文件。
  4. 系统找不到指定的文件。
复制代码
请高手指点哪里写错了。多谢多谢


+++++++++++++++++++++++++++++++++++++++++++++++++
仔细测试了很久,发现出问题的可能不是上面的代码,而是系统命令
如下图所示:

虽然ATTRIB命令成功了
但文件夹的属性并没有变化,所以导致了后面命令的错误。

有大神知道为什么会出现这种BUG吗?

++++++++++++++++++++++++++++++++++++++++++++++++
再次更新:知道原因了,Attrib在处理链接文件时需要加 /L 参数

请发完整代码,如果这就是完整代码,那么%%b是空的,因为缺少for .... %%b ..... ,但这个报错样子看起来不是%%b空的,请发完整代码!
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

不建议压缩if,因为很有可能搞砸
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

还有就是 如果你是指 B 是文件夹,那么你写%%B就是错误的
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

move不等于ren,重命名一般不会出错
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

代码可以写成:
第一种 B 不是目录
  1. if exist "%%b" (
  2. ATTRIB -S -H -R "%%b"
  3. RD /S /Q "%%b.Ray"
  4. MOVE /Y "%%b" "%%b.Ray"
  5. )
复制代码
第二种 B 是目录
  1. if exist b (
  2. ATTRIB -S -H -R b
  3. RD /S /Q b.Ray
  4. MOVE /Y b b.Ray
  5. )
复制代码
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

回复 2# cmd1152

b是前段代码中取得的变量,内容为一个目录的路径,例如:  C:\TEMP

TOP

回复 7# cntanglang
如果存在隐藏属性的文件或文件夹,要使用for /f +dir.../a...组合。

TOP

回复 8# qixiaobin0715


    我不需要遍历寻找这个隐藏文件夹,我已经在前面的代码中获得了,就存在变量b中

TOP

返回列表