标题: [文件操作] 【已解决】重命名文件夹的BAT代码,不能按预期执行 [打印本页]
作者: cntanglang 时间: 2021-11-14 17:23 标题: 【已解决】重命名文件夹的BAT代码,不能按预期执行
本帖最后由 cntanglang 于 2021-11-15 14:26 编辑
这段代码- 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具有隐藏属性,则代码报错结果为:- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
- 系统找不到指定的文件。
复制代码
请高手指点哪里写错了。多谢多谢
+++++++++++++++++++++++++++++++++++++++++++++++++
仔细测试了很久,发现出问题的可能不是上面的代码,而是系统命令
如下图所示:
虽然ATTRIB命令成功了
但文件夹的属性并没有变化,所以导致了后面命令的错误。
有大神知道为什么会出现这种BUG吗?
++++++++++++++++++++++++++++++++++++++++++++++++
再次更新:知道原因了,Attrib在处理链接文件时需要加 /L 参数
作者: cmd1152 时间: 2021-11-14 18:10
请发完整代码,如果这就是完整代码,那么%%b是空的,因为缺少for .... %%b ..... ,但这个报错样子看起来不是%%b空的,请发完整代码!
作者: cmd1152 时间: 2021-11-14 18:11
不建议压缩if,因为很有可能搞砸
作者: cmd1152 时间: 2021-11-14 18:13
还有就是 如果你是指 B 是文件夹,那么你写%%B就是错误的
作者: cmd1152 时间: 2021-11-14 18:14
move不等于ren,重命名一般不会出错
作者: cmd1152 时间: 2021-11-14 18:17
代码可以写成:
第一种 B 不是目录- if exist "%%b" (
- ATTRIB -S -H -R "%%b"
- RD /S /Q "%%b.Ray"
- MOVE /Y "%%b" "%%b.Ray"
- )
复制代码
第二种 B 是目录- if exist b (
- ATTRIB -S -H -R b
- RD /S /Q b.Ray
- MOVE /Y b b.Ray
- )
复制代码
作者: cntanglang 时间: 2021-11-15 09:33
回复 2# cmd1152
b是前段代码中取得的变量,内容为一个目录的路径,例如: C:\TEMP
作者: qixiaobin0715 时间: 2021-11-15 09:46
回复 7# cntanglang
如果存在隐藏属性的文件或文件夹,要使用for /f +dir.../a...组合。
作者: cntanglang 时间: 2021-11-15 13:35
回复 8# qixiaobin0715
我不需要遍历寻找这个隐藏文件夹,我已经在前面的代码中获得了,就存在变量b中
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |