Board logo

标题: [文件操作] 如何获取批处理文件所在路径呀? [打印本页]

作者: wqte45    时间: 2019-6-9 13:37     标题: 如何获取批处理文件所在路径呀?

需要用fsum来计算和检测MD5,为了在不同的目录环境下都能正确执行批处理,
需要用fsum -d参数也设置路径,有的目录有空格,所以给%~dp0加了双引号,
然后问题出现了,运行到这句命令就出错了。
  1. "%~dp0fsum" -r -d"%~dp0" *.*
复制代码
准确来说是-d"%~dp0"   这里获取的路径最后有一个反斜杠\ 会与最后一个引号结合,失去了原来的作用
现在我把这句修改成了
  1. "%~dp0fsum" -r -d"%~dp0\" *.*
复制代码
这样可以正确运行了,cmd解析为:
  1. "D:\Program Files\fsum" -d"D:\Program Files\\" *.*
复制代码
但是这样会不会有隐患的问题,会不会在别的系统上不能成功???
另外还有别的获取路径的最后不带反斜杠的方法吗?
作者: wqte45    时间: 2019-6-9 14:11

本帖最后由 wqte45 于 2019-6-9 14:15 编辑

如果在批处理中,后面跟不跟文件或路径单独使用"%~dp0" 当做路径操作 也不会有问题,
只有用作fsum -d的参数时候,才会有问题,可能是 fsum的原因吧
  1. "D:\Program Files\fsum" -d"D:\Program Files\" *.*
  2. D:\Program Files" *.*\ - no such directory
复制代码

作者: miqilaosu    时间: 2019-6-9 14:40

本帖最后由 miqilaosu 于 2019-6-9 15:49 编辑

回复 1# wqte45


    你-d 后面都不用空格的吗,直接复制我的代码替换掉你的代码就行了
  1. "%~dp0fsum" -r -d '%~dp0' *.*
复制代码

作者: kingshui    时间: 2019-6-10 09:52

  1. "%~dp0fsum" -r -d"%~dp0"\ *.*
复制代码
这样写不就OK了?
作者: miqilaosu    时间: 2019-6-10 10:23

本帖最后由 miqilaosu 于 2019-6-10 10:34 编辑

回复 4# kingshui


    你这样写应该会报错吧\"\和\\" 完全不一样,他加\应该是想注释掉自带的\吧
作者: /zhqsystem/zhq    时间: 2019-6-10 12:01

方法1:
for /f "delims=" %%i in ("%~f0\..")do echo,%%~fi&&rem 这里建议设置一个变量便于后续所有操作
方法2:
pushd %~dp0
echo,跳转后路径%cd%
popd
echo,跳转前路径%cd%
作者: wqte45    时间: 2019-6-11 16:26

回复 3# miqilaosu
fsum.exe 的 -d参数默认是没有空格的;
你提供的单引号的方法运行的那句命令是可以的,但检测的时候就不可以了。
  1. "%~dp0fsum" -r -d '%~dp0' *.* > md5.log        可以
  2. "%~dp0fsum" -d '%~dp0' -c md5.log              失败
复制代码
我就那样先用着吧,谢谢啦。
作者: miqilaosu    时间: 2019-6-11 17:05

本帖最后由 miqilaosu 于 2019-6-11 17:49 编辑

回复 7# wqte45
  1. "fsum" -r -d '%~dp0' *.* >md5.log
  2. "fsum" -d '%~dp0' -c md5.log
  3. pause
复制代码
因为是当前盘说实话一个反斜杠就够了,/\你看自己喜欢用,fsum也在当前盘,所以前边可以不加那个取地址符
  1. @echo off
  2. fsum -r -d \ *.* >md5.log
  3. fsum -d \ -c md5.log
  4. pause
复制代码
我电脑上这两个都可以执行,不过你第二个是想显示md5.log的MD5,还是md5.log里面的md5值?
  1. @echo off
  2. fsum -r -d \ *.* >md5.log
  3. fsum -d \ -c md5.log
  4. echo,********************     ↓MD5LOG↓    ********************
  5. echo,***********************************************************
  6. for /f "delims=" %%i in ('type md5.log') do echo,%%i
  7. echo,***********************************************************
  8. pause
复制代码
fsum 代码我不熟悉,我自己试了如果子目录多,会先卡顿一会才执行的
我打星号主要是让你区分,读取md5.log的MD5码还是for循环md5.log里面保存的值
FOR我是直接全显示出来了,这个可分别显示MD5值和文件名的,我赖人闲麻烦我就没弄




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