标题: [文件操作] 批处理for获取文件夹名称错误? [打印本页]
作者: aries215 时间: 2024-8-24 10:29 标题: 批处理for获取文件夹名称错误?
我要跨盘复制文件,运行却发现就这个动作失败了。- @echo off
- Setlocal EnableDelayedExpansion
- set "SourceDrive=E:"
- :::::::
- for /d /r "!SourceDrive!\Windows\servicing\Version\" %%i in (*) do (set "vn=%%~ni")
- if "!vn:~,3!" equ "6.3" set osver=8
- if "!vn:~,2!" equ "10" set osver=10
- echo !osver!
- pause
复制代码
为何此处for不能用 ! 改为%才正确搜索到?感谢!
作者: 77七 时间: 2024-8-24 11:04
!VHD!是定义的一个变量吗?单独测试是怎么测试的?
作者: aries215 时间: 2024-8-24 11:15
本帖最后由 aries215 于 2024-8-24 11:38 编辑
回复 2# 77七
是呀,开头已定义,这个不要紧。
括号里还复制了若干个文件都是成功的,就这个文件需要判断版本却总“找不到指定文件”。
作者: 77七 时间: 2024-8-24 11:36
回复 3# aries215
- if exist "F:\Windows\SysWOW64\" (
- echo copy /v /y "Sys\disk!osver!64.sys" "F:\Windows\System32\drivers\disk.sys"
- ) else (
- echo copy /v /y "Sys\disk!osver!32.sys" "F:\Windows\System32\drivers\disk.sys"
- )
复制代码
单从代码上我是没看出什么问题,echo 一下,看看执行的命令和你单独测试的是否一样
作者: 77七 时间: 2024-8-24 11:37
回复 3# aries215
找不到文件,是路径的问题,用绝对路径
作者: aries215 时间: 2024-8-24 11:40
本帖最后由 aries215 于 2024-8-24 11:42 编辑
回复 5# 77七
不是路径问题,括号内其它几个文件都能复制到位,就这个需要判断文件名的无法找到。
将其改为固定名称就能复制成功!
作者: aries215 时间: 2024-8-24 11:57
本帖最后由 aries215 于 2024-8-24 12:13 编辑
回复 2# 77七
排除发现 for /d /r "****\servicing\Version\" 这行出错了,值为空
作者: Five66 时间: 2024-8-24 13:42
EnableDelayedExpansion时,英文感叹号包围的变量是在for之后解释的
for /d /r "!SourceDrive!\Windows\servicing\Version\"中的!SourceDrive!不是作为变量而是作为for的一部分了,简单来讲就是for /r的path不支持感叹号的变量
作者: aloha20200628 时间: 2024-8-24 15:04
本帖最后由 aloha20200628 于 2024-8-24 15:05 编辑
回复 1# aries215
批处所有类型的 for ... in () do () 句式中的 ... 参数均不能包含 !var! 变量
一楼代码中的 "!SourceDrive!\Windows\servicing\Version\" 改为 "%SourceDrive%\Windows\servicing\Version\" 即可...
作者: qixiaobin0715 时间: 2024-8-25 10:45
回复 9# aloha20200628
是的,以前使用过:复制代码
就报错,换成%n%通过。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |