Board logo

标题: [其他] 批处理如何处理UNC路径? [打印本页]

作者: yuan_53770    时间: 2010-9-26 17:07     标题: 批处理如何处理UNC路径?

我用以下批处理
  1. @echo off
  2. rem 使用 reg 命令读注册表获取路径并作为路径变量
  3. for /f "tokens=2*" %%a in ('REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WMDrive" /v ImagePath^|findstr "ImagePath"') do (
  4.   set MyPath=%%b
  5. )
  6. echo %MyPath%
  7. pause
复制代码
得到了这样的结果:\??\C:\WINDOWS\system32\drivers\WMDrive.sys
其中,我想利用\??\C:\WINDOWS\system32\drivers这个路径作为下面这个批处理md5校检的路径
  1. @echo off
  2. title=md5sum
  3. echo ************************************
  4. echo    本程式用于md5sum校验
  5. echo ************************************
  6. echo.
  7. set site=C:\WINDOWS\system32\drivers
  8. cd /d %site%
  9. for /f "delims=" %%a in ('dir /b /od %site%') do set WMDrive.sys=%%a
  10. if "%WMDrive.sys%"=="" goto eof
  11. md5sum %WMDrive.sys%
  12. goto theend
  13. :eof
  14. echo 位置:%site% 中没有文件
  15. :theend
  16. echo. &pause
复制代码
不知可以吗?
也就是说,如果把这两个批处理合在一起执行,如何让第二个批处理采用第一个批处理取得的路径,因为路径里含有\??\这样的字符,不懂如何修改?
希望知道的兄弟帮一下,谢谢。
作者: Batcher    时间: 2010-9-26 17:42

  1. @echo off
  2. title md5sum
  3. echo ************************************
  4. echo    本程式用于md5sum校验
  5. echo ************************************
  6. echo.
  7. set "site=C:\WINDOWS\system32\drivers"
  8. cd /d "%site%"
  9. for /f "delims=" %%a in ('dir /b /od "%site%"') do (
  10.     set "WMDrive.sys=%%a"
  11. )
  12. rem 使用 reg 命令读注册表获取路径并作为路径变量
  13. for /f "tokens=2 delims=:" %%a in ('REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WMDrive" /v ImagePath^|findstr "ImagePath"') do (
  14.     set "MyPath=%%~dpa"
  15. )
  16. if "%WMDrive.sys%" -neq "%MyPath%" (
  17.     goto :NoFile
  18. )
  19. md5sum %WMDrive.sys%
  20. goto :end
  21. :NoFile
  22. echo 位置:%site% 中没有文件
  23. :end
  24. echo. &pause
复制代码

作者: q120072949    时间: 2010-9-26 17:47

cd 路径
比如cd c:\
但是跳转的路径只局限于这个批处理的盘符
如果要跳转到其他盘必须加参数/d
cd /d 路径
比如批处理在C盘运行要把运行路径转到D盘
cd /d d:\
2个批处理衔接可以赋值
batcher已经给了代码
cd /d "%site%"
作者: yuan_53770    时间: 2010-9-26 23:07

我试了batcher给的代码,不知为何一闪而过,什么也没有,也许大家没明白我的意思,其实我只是想先用第一个批处理得到sys文件的路径,然后第二个批处理再引用这个路径校检md5,其实就是unc路径变成本地路径

不过还是在batcher的代码中受益,关键就在于把
"tokens=2*" 改成 "tokens=2 delims=:"
set MyPath=%%b 改成 set "MyPath=%%~dpa"
即可。在此严重感谢batcher大大的帮助!
作者: yuan_53770    时间: 2010-9-26 23:08

@echo off
rem 使用 reg 命令读注册表获取路径并作为路径变量
for /f "tokens=2 delims=:" %%a in ('REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WMDrive" /v ImagePath^|findstr "ImagePath"') do (
    set "MyPath=%%~dpa"
)
echo %MyPath%
pause
@echo off
title=md5sum
echo ************************************
echo    本程式用于md5sum校验
echo ************************************
echo.

cd /d %MyPath%

for /f "delims=" %%a in ('dir /b /od %MyPath%') do set WMDrive.sys=%%a
if "%WMDrive.sys%"=="" goto eof

md5sum %WMDrive.sys%
goto theend

:eof
echo 位置:%MyPath% 中没有文件

:theend
echo. &pause
作者: yuan_53770    时间: 2010-9-26 23:33

但放到别的盘符就不行了,唉




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2