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

[文件操作] 批处理for获取文件夹名称错误?

我要跨盘复制文件,运行却发现就这个动作失败了。
  1. @echo off
  2. Setlocal EnableDelayedExpansion
  3. set "SourceDrive=E:"
  4. :::::::
  5. for /d /r "!SourceDrive!\Windows\servicing\Version\" %%i in (*) do (set "vn=%%~ni")
  6. if "!vn:~,3!" equ "6.3" set osver=8
  7. if "!vn:~,2!" equ "10" set osver=10
  8. echo !osver!
  9. pause
复制代码
为何此处for不能用 ! 改为%才正确搜索到?感谢!

!VHD!是定义的一个变量吗?单独测试是怎么测试的?
bat小白,请多指教!谢谢!

TOP

本帖最后由 aries215 于 2024-8-24 11:38 编辑

回复 2# 77七
是呀,开头已定义,这个不要紧。
括号里还复制了若干个文件都是成功的,就这个文件需要判断版本却总“找不到指定文件”。

TOP

回复 3# aries215

  1. if exist "F:\Windows\SysWOW64\" (
  2. echo copy /v /y "Sys\disk!osver!64.sys" "F:\Windows\System32\drivers\disk.sys"
  3. ) else (
  4. echo copy /v /y "Sys\disk!osver!32.sys" "F:\Windows\System32\drivers\disk.sys"
  5. )
复制代码

   单从代码上我是没看出什么问题,echo 一下,看看执行的命令和你单独测试的是否一样
bat小白,请多指教!谢谢!

TOP

回复 3# aries215

找不到文件,是路径的问题,用绝对路径
bat小白,请多指教!谢谢!

TOP

本帖最后由 aries215 于 2024-8-24 11:42 编辑

回复 5# 77七
不是路径问题,括号内其它几个文件都能复制到位,就这个需要判断文件名的无法找到。
将其改为固定名称就能复制成功!

TOP

本帖最后由 aries215 于 2024-8-24 12:13 编辑

回复 2# 77七
排除发现 for /d /r "****\servicing\Version\" 这行出错了,值为空

TOP

EnableDelayedExpansion时,英文感叹号包围的变量是在for之后解释的
for /d /r "!SourceDrive!\Windows\servicing\Version\"中的!SourceDrive!不是作为变量而是作为for的一部分了,简单来讲就是for /r的path不支持感叹号的变量

TOP

本帖最后由 aloha20200628 于 2024-8-24 15:05 编辑

回复 1# aries215

批处所有类型的 for ... in () do () 句式中的 ... 参数均不能包含 !var! 变量
一楼代码中的 "!SourceDrive!\Windows\servicing\Version\" 改为 "%SourceDrive%\Windows\servicing\Version\" 即可...

TOP

回复 9# aloha20200628
是的,以前使用过:
  1. for /f "tokens=!n!" ...
复制代码
就报错,换成%n%通过。

TOP

返回列表