标题: [文件操作] 如何获取批处理文件所在路径呀? [打印本页]
作者: wqte45 时间: 2019-6-9 13:37 标题: 如何获取批处理文件所在路径呀?
需要用fsum来计算和检测MD5,为了在不同的目录环境下都能正确执行批处理,
需要用fsum -d参数也设置路径,有的目录有空格,所以给%~dp0加了双引号,
然后问题出现了,运行到这句命令就出错了。- "%~dp0fsum" -r -d"%~dp0" *.*
复制代码
准确来说是-d"%~dp0" 这里获取的路径最后有一个反斜杠\ 会与最后一个引号结合,失去了原来的作用
现在我把这句修改成了- "%~dp0fsum" -r -d"%~dp0\" *.*
复制代码
这样可以正确运行了,cmd解析为:- "D:\Program Files\fsum" -d"D:\Program Files\\" *.*
复制代码
但是这样会不会有隐患的问题,会不会在别的系统上不能成功???
另外还有别的获取路径的最后不带反斜杠的方法吗?
作者: wqte45 时间: 2019-6-9 14:11
本帖最后由 wqte45 于 2019-6-9 14:15 编辑
如果在批处理中,后面跟不跟文件或路径单独使用"%~dp0" 当做路径操作 也不会有问题,
只有用作fsum -d的参数时候,才会有问题,可能是 fsum的原因吧- "D:\Program Files\fsum" -d"D:\Program Files\" *.*
- D:\Program Files" *.*\ - no such directory
复制代码
作者: miqilaosu 时间: 2019-6-9 14:40
本帖最后由 miqilaosu 于 2019-6-9 15:49 编辑
回复 1# wqte45
你-d 后面都不用空格的吗,直接复制我的代码替换掉你的代码就行了- "%~dp0fsum" -r -d '%~dp0' *.*
复制代码
作者: kingshui 时间: 2019-6-10 09:52
- "%~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参数默认是没有空格的;
你提供的单引号的方法运行的那句命令是可以的,但检测的时候就不可以了。- "%~dp0fsum" -r -d '%~dp0' *.* > md5.log 可以
- "%~dp0fsum" -d '%~dp0' -c md5.log 失败
复制代码
我就那样先用着吧,谢谢啦。
作者: miqilaosu 时间: 2019-6-11 17:05
本帖最后由 miqilaosu 于 2019-6-11 17:49 编辑
回复 7# wqte45 - "fsum" -r -d '%~dp0' *.* >md5.log
- "fsum" -d '%~dp0' -c md5.log
- pause
复制代码
因为是当前盘说实话一个反斜杠就够了,/和\你看自己喜欢用,fsum也在当前盘,所以前边可以不加那个取地址符- @echo off
- fsum -r -d \ *.* >md5.log
- fsum -d \ -c md5.log
- pause
复制代码
我电脑上这两个都可以执行,不过你第二个是想显示md5.log的MD5,还是md5.log里面的md5值?- @echo off
- fsum -r -d \ *.* >md5.log
- fsum -d \ -c md5.log
- echo,******************** ↓MD5LOG↓ ********************
- echo,***********************************************************
- for /f "delims=" %%i in ('type md5.log') do echo,%%i
- echo,***********************************************************
- pause
复制代码
fsum 代码我不熟悉,我自己试了如果子目录多,会先卡顿一会才执行的
我打星号主要是让你区分,读取md5.log的MD5码还是for循环md5.log里面保存的值
FOR我是直接全显示出来了,这个可分别显示MD5值和文件名的,我赖人闲麻烦我就没弄
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |