找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 17762|回复: 8

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

[复制链接]
发表于 2021-11-14 17:23:11 | 显示全部楼层 |阅读模式
本帖最后由 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 参数
发表于 2021-11-14 18:10:59 | 显示全部楼层
请发完整代码,如果这就是完整代码,那么%%b是空的,因为缺少for .... %%b ..... ,但这个报错样子看起来不是%%b空的,请发完整代码!
发表于 2021-11-14 18:11:59 | 显示全部楼层
不建议压缩if,因为很有可能搞砸
发表于 2021-11-14 18:13:42 | 显示全部楼层
还有就是 如果你是指 B 是文件夹,那么你写%%B就是错误的
发表于 2021-11-14 18:14:42 | 显示全部楼层
move不等于ren,重命名一般不会出错
发表于 2021-11-14 18:17:01 | 显示全部楼层
代码可以写成:
第一种 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. )
复制代码
 楼主| 发表于 2021-11-15 09:33:26 | 显示全部楼层
回复 2# cmd1152

b是前段代码中取得的变量,内容为一个目录的路径,例如:  C:\TEMP
发表于 2021-11-15 09:46:30 | 显示全部楼层
回复 7# cntanglang
如果存在隐藏属性的文件或文件夹,要使用for /f +dir.../a...组合。
 楼主| 发表于 2021-11-15 13:35:16 | 显示全部楼层
回复 8# qixiaobin0715


    我不需要遍历寻找这个隐藏文件夹,我已经在前面的代码中获得了,就存在变量b中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 00:23 , Processed in 0.041726 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表