无忧启动论坛

标题: 麻烦看下这个批处理错在哪里 [打印本页]

作者: yjqd    时间: 2017-10-25 13:29
标题: 麻烦看下这个批处理错在哪里
批处理:
@echo off
cd /d %~dp0

For /f "tokens=1 delims= " %%b in ('"%~dp0微软md5希哈值验证fciv.exe" -both "grub4dos-0.4.6a-2016-08-06.7z"') do (set m=%%b)
echo 验证得到MD5值 %m%
echo.

For /f "tokens=2 delims= " %%b in ('"%~dp0微软md5希哈值验证fciv.exe" -both "grub4dos-0.4.6a-2016-08-06.7z"') do (set x=%%b)
echo 验证得到希哈值 %x%
echo.

运行后结果报错如下:

'D:\实用工具集合\PEWIN8和WIN7PE的修改\Program' 不是内部或外部命令,也不是可运行的程序或批处理文件。
验证得到MD5值

'D:\实用工具集合\PEWIN8和WIN7PE的修改\Program' 不是内部或外部命令,也不是可运行的程序或批处理文件。
验证得到希哈值

将for命令中"grub4dos-0.4.6a-2016-08-06.7z"的引号去掉,运行后结果正常:

验证得到MD5值 182f449cd2e53718b50a97bf9b1b129c

验证得到希哈值 75613178bbfd45a16b6a6044ca2b5fdba7976984

如果要保留引号,应该怎样修改才不会报错呢
作者: freesoft00    时间: 2017-10-25 14:40
for语句中,在"%~dp0前面加上^,
作者: yjqd    时间: 2017-10-25 16:02
freesoft00 发表于 2017-10-25 14:40
for语句中,在"%~dp0前面加上^,

谢谢回复
我如下操作后还是报错:
For /f "tokens=1 delims= " %%b in ('^"%~dp0微软md5希哈值验证fciv.exe" -both "grub4dos-0.4.6a-2016-08-06.7z"') do (set m=%%b)
echo 验证得到MD5值 %m%
echo.

For /f "tokens=2 delims= " %%b in ('^"%~dp0微软md5希哈值验证fciv.exe" -both "grub4dos-0.4.6a-2016-08-06.7z"') do (set x=%%b)
echo 验证得到希哈值 %x%
echo.


作者: freesoft00    时间: 2017-10-25 16:17
For /f "tokens=2 delims= " %%b in ('^,"%~dp0微软md5希哈值验证fciv.exe" -both "grub4dos-0.4.6a-2016-08-06.7z"') do (set x=%%b)
echo 验证得到希哈值 %x%
echo.
作者: freesoft00    时间: 2017-10-25 16:18
yjqd 发表于 2017-10-25 16:02
谢谢回复
我如下操作后还是报错:
For /f "tokens=1 delims= " %%b in ('^"%~dp0微软md5希哈值验证fciv ...

我已经标明了颜色,你还是少了一个。
作者: yjqd    时间: 2017-10-25 16:37
freesoft00 发表于 2017-10-25 16:18
我已经标明了颜色,你还是少了一个。

谢谢回复,成功了
很抱歉,是我的错,少加了一个逗号
发贴之前,我加了参数usebackq也不行,所以只好求助,再次谢谢freesoft00
=========================================================
For /f "tokens=1 delims= " %%b in ('^,"%~dp0微软md5希哈值验证fciv.exe" -both "grub4dos-0.4.6a-2016-08-06.7z"') do (set m=%%b)
echo 验证得到MD5值 %m%
echo.

For /f "tokens=2 delims= " %%b in ('^,"%~dp0微软md5希哈值验证fciv.exe" -both "grub4dos-0.4.6a-2016-08-06.7z"') do (set x=%%b)
echo 验证得到希哈值 %x%
echo.

验证得到MD5值 182f449cd2e53718b50a97bf9b1b129c

验证得到希哈值 75613178bbfd45a16b6a6044ca2b5fdba7976984
=========================================================

作者: nttwqz    时间: 2017-10-25 16:48
  1. @echo off
  2. pushd %~dp0\
  3. For /f "tokens=1,2" %%a in ('微软md5希哈值验证fciv.exe -both "grub4dos-0.4.6a-2016-08-06.7z"') do (
  4.         echo 验证得到MD5值        %%a
  5.         echo 验证得到希哈值        %%b
  6. )
  7. echo;
复制代码

作者: yjqd    时间: 2017-10-25 17:02
nttwqz 发表于 2017-10-25 16:48

谢谢回复
我去试试
=========================================================
为了发贴求助,我简化了一个批处理,这样内容少些。
在我实际运用中,把要验证的文件拖入批处理窗口,微软的fciv.exe好像对路径识别有问题,所以把批处理用CD命令进入了待验证文件的路径,fciv.exe和待验证文件又不在同一路径,就在fciv.exe前面加了路径,考虑到文件名有空格或路径有空格,所以都加了引号
作者: nttwqz    时间: 2017-10-25 17:04
yjqd 发表于 2017-10-25 17:02
谢谢回复
我去试试
=========================================================

搞这么麻烦,下个hash放到发送到文件夹不就好了
作者: yjqd    时间: 2017-10-25 17:07
nttwqz 发表于 2017-10-25 17:04
搞这么麻烦,下个hash放到发送到文件夹不就好了

每验证一个文件都要发送一次吗
作者: yjqd    时间: 2017-10-25 17:41
nttwqz 发表于 2017-10-25 16:48

下面是我原来的批处理内容:

@echo off
cd /d %~dp0
title 微软md5希哈值验证工具fciv
echo.
echo                              微软md5希哈值验证工具fciv
echo ================================================================================

:r

set p=
set /p p=拖入要验证的文件:
echo.

if "%p:~1,1%"==":" set p="%p%"


For /f "delims=" %%b in (%p%) do (set pp=%%~nxb
set ppp=%%~dpb)


echo.

echo 文件所在路径 %ppp%
echo.
echo 文件在路径和文件名 %p%
echo.
echo 文件名 %pp%
echo.
cd /d "%ppp%"
echo.
echo 进入文件所在路径 %cd%
echo.
rem 微软md5希哈值验证fciv.exe -md5 "%pp%"

rem 微软md5希哈值验证fciv.exe -both "%pp%"

For /f "tokens=1 delims= " %%b in ('微软md5希哈值验证fciv.exe -both "%pp%"') do (set m=%%b)
echo 验证得到MD5值 %m%
echo.

For /f "tokens=2 delims= " %%b in ('微软md5希哈值验证fciv.exe -both "%pp%"') do (set x=%%b)
echo 验证得到希哈值 %x%

echo.

set /p ym=输入原提供者给出的MD5值:
echo.
if /i "%ym%"=="" echo 你没有输入原提供者给出的MD5值
echo.
set /p yx=输入原提供者给出的希哈值:
echo.
if /i "%yx%"=="" echo 你没有输入原提供者给出的希哈值
echo.

if /i "%ym%"=="%m%" (echo.&echo MD5值相等) else echo.&echo MD5值不相等
echo.
if /i "%yx%"=="%x%" (echo.&echo 希哈值相等) else echo.&echo 希哈值不相等
echo.

set x=
set y=
set yx=
set ym=
echo.
pause
echo.
goto r
exit

作者: nttwqz    时间: 2017-10-25 18:21
yjqd 发表于 2017-10-25 17:07
每验证一个文件都要发送一次吗

不在同一个文件夹下的当然要发多次了,一个文件夹下的选中一起发送就好。注意hash需要管理员权限
作者: wjgyz740526    时间: 2017-10-25 23:51
hashtab直接集成到文件属性窗口和右键菜单 对文件夹操作就批量计算
作者: x9tian    时间: 2017-10-29 20:28
加usebackq  要变号的
作者: yjqd    时间: 2018-4-20 16:52
freesoft00 发表于 2017-10-25 16:18
我已经标明了颜色,你还是少了一个。


我发的帖子在:
http://bbs.wuyou.net/forum.php?m ... &fromuid=569633

请麻烦看一下该怎样写:

win7pe中的winpeshl.ini内容如下:

[LaunchApps]

"xcopy X:\Program Files\小知识 X:\Users\Default\Desktop"
运行无效

改成:
"xcopy “X:\Program Files\小知识” X:\Users\Default\Desktop"
还是无效

改成单引号也无效
'X:\Program Files\小知识'
作者: freesoft00    时间: 2018-4-20 19:25
echo d|xcopy “X:\Program Files\小知识” "X:\Users\Default\Desktop"
作者: yjqd    时间: 2018-4-20 19:51
freesoft00 发表于 2018-4-20 19:25
echo d|xcopy “X:\Program Files\小知识” "X:%users\Default\Desktop"

谢谢回复
我去试试

应该不是没有echo d的原因,我试过拷贝没有空格的文件夹时,它会提示选择文件还是目录

"xcopy %windir%\重启.bat X:\Users\Default\Desktop"      这种格式也必须加双引号全部引起来,不则无效

如果有空格路径加了双引号,总共两个双引号,执行无效


作者: yjqd    时间: 2018-4-20 20:43
freesoft00 发表于 2018-4-20 19:25
echo d|xcopy “X:\Program Files\小知识” "X:%users\Default\Desktop"


echo d|xcopy “X:\Program Files\小知识” "X:\Users\Default\Desktop"
测试了,无效




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3