. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 关闭主题
 
主题工具
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,916 声望值: 3
精华: 0
#1 旧 2012-01-26, 16:43:11 默认 已解答: 【求助】TC如何给每个文件夹创建一个校验文件?
林展扬 当前离线  

例如,现在有1、2、3、4、5……100文件夹,然后下面每个文件夹各有1.txt、2.txt、3.txt……100.txt,现在想达到每个文件夹下有个校验文件,请问这个可以做到吗?


坚持失去了意义,是消失的时候了。
最佳解答为:namejm
把2楼的代码稍微改动以下就可以了:
代码:
@echo off
set "path=%path%;%cd%"
for /f "delims=" %%i in ("%cd%") do fsum -js *.txt>"%%~nxi.sfv"
for /f "delims=" %%i in ('dir /ad /b /s 2^>nul') do (
    pushd "%%i"
    fsum -js *.txt>"%%~nxi.sfv"
    popd
)
pause
原本以为fsum直接支持绝对路径的,最初把第2个for写成下面的语句:
代码:
for /f "delims=" %%i in ('dir /ad /b /s 2^>nul') do fsum -js "%%i\*.txt">"%%i\%%~nxi.sfv"
结果生成的sfv文件中,虽然识别出了每个子文件夹下的所有txt文件,但是却没法计算每个txt文件的sfv值,每行都是形如 “NOT FOUND ***** ××.txt” 的格式,推测这样的语句和fsum验证子文件夹的 -r 参数的功能发生了冲突,只好对每个子文件都强制跳转
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,916 声望值: 3
精华: 0
#2 旧 2012-01-27, 15:35:29 默认
林展扬 当前离线  

不仅限制于TC,有没有别的办法??

感觉用cmd配合能创建校验的软件应该有戏,请高手出手。
:)
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,248 声望值: 3
精华: 18,解答: 76
#3 旧 2012-01-27, 20:54:14 默认
namejm 当前离线  

把附件中的md5.exe释放到当前目录下
然后把以下代码保存为*.cmd文件后运行
将在每个文件夹下生成名为MD5.md5的文件,里面记录每个文件夹下所有txt文件的MD5值(md5.exe不支持带引号的路径,只能强行跳转以规避这个限制)
代码:
@echo off
set "path=%path%;%cd%"
md5 -oMD5.md5 *.txt 2>nul
for /f "delims=" %%i in ('dir /ad /b /s 2^>nul') do (
    pushd "%%i"
    md5 -oMD5.md5 *.txt 2>nul
    popd
)
pause
上传的附件
文件类型: rar md5.rar (22.5 KB, 2 次查看)


TotalCommder、EveryThing、batch、AutoHotKey、EverEdit
精通Word、Excel、PPT的安装与卸载
熟练掌握VB、C++、SQL的缩写
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,916 声望值: 3
精华: 0
#4 旧 2012-01-28, 01:36:31 默认
林展扬 当前离线  

找到一个好东西,fsum,下载在附件。
引用:
SlavaSoft Optimizing Checksum Utility - fsum 2.51
Implemented using SlavaSoft QuickHash Library <www.slavasoft.com>
Copyright (C) SlavaSoft Inc. 1999-2004. All rights reserved.


Usage: fsum.exe <OPTIONS>... <FILE>...

Options:

-c or --check - check sums against given list
-d<directory> - set working directory
-jf - print only failed lines while checking
-jm - use MD5 format
-js - use SFV format
-jnc - supress comments
-r - recurse subdirectories
-s or --status - don't output anything, status code shows success
-w or --warn - warn about improperly formatted checksum lines

-md2 - include MD2 algorithm
-md4 - include MD4 algorithm
-md5 - include MD5 algorithm
-sha1 - include SHA-1 algorithm
-sha256 - include SHA-2( 256 ) algorithm
-sha384 - include SHA-2( 384 ) algorithm
-sha512 - include SHA-2( 512 ) algorithm
-rmd - include RIPEMD-160 algorithm
-tiger - include TIGER algorithm
-panama - include PANAMA algorithm
-adler - include ADLER32 algorithm
-crc32 - include CRC32 algorithm
-edonkey - include EDONKEY algorithm
现在的目标求一个cmd文件,把这个cmd文件和fsum.exe放在同一目录下,能够自动遍历每个目录并计算每个目录下的所有文件的sfv值并保存为<文件夹名>.sfv。

例如,文件夹1下,有1.txt、2.txt、3.txt……100.txt,希望能够在这个文件夹下生成1.sfv,包含这些文件的校验信息。

谢谢楼上的朋友。
上传的附件
文件类型: rar fsum.rar (67.5 KB, 6 次查看)
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,248 声望值: 3
精华: 18,解答: 76
#5 旧 2012-01-28, 11:57:59 默认
namejm 当前离线  

把2楼的代码稍微改动以下就可以了:
代码:
@echo off
set "path=%path%;%cd%"
for /f "delims=" %%i in ("%cd%") do fsum -js *.txt>"%%~nxi.sfv"
for /f "delims=" %%i in ('dir /ad /b /s 2^>nul') do (
    pushd "%%i"
    fsum -js *.txt>"%%~nxi.sfv"
    popd
)
pause
原本以为fsum直接支持绝对路径的,最初把第2个for写成下面的语句:
代码:
for /f "delims=" %%i in ('dir /ad /b /s 2^>nul') do fsum -js "%%i\*.txt">"%%i\%%~nxi.sfv"
结果生成的sfv文件中,虽然识别出了每个子文件夹下的所有txt文件,但是却没法计算每个txt文件的sfv值,每行都是形如 “NOT FOUND ***** ××.txt” 的格式,推测这样的语句和fsum验证子文件夹的 -r 参数的功能发生了冲突,只好对每个子文件都强制跳转
林展扬
 
林展扬 的头像
超级会员
 
资 料:
注册日期: Sep 2002
帖子: 1,916 声望值: 3
精华: 0
#6 旧 2012-01-28, 15:17:44 默认
林展扬 当前离线  

好使~!多谢高手的帮助。:)

有点小疑问,"delims="是切分字符串,后面跟空是代表什么意思?
还有%%~nxi是什么意思?
namejm
 
namejm 的头像
超级会员
 
资 料:
注册日期: Apr 2009
帖子: 1,248 声望值: 3
精华: 18,解答: 76
#7 旧 2012-01-28, 15:28:06 默认
namejm 当前离线  

for /f 默认以空格和tab作为分隔符
"delims=" 表示不以任何字符作为分隔符,把整行字符串作为一个整体来提取
%%~nxi 中的 n 是 name 的缩写,表示文件名,x 是 expanded-name 的缩写,表示扩展名,合起来就是获取文件名及其扩展名(包含扩展名前的点号),之前的for获取的是形如 C:\abc\123 这样的文件夹完整路径,使用 %%~nxi 会获取到 123 这个文件夹名,这里利用了for语句扩展变量的一个小技巧:对于文件路径的扩展,for 是以反斜杠符号为分隔符来分段提取的,虽然 %%~nxi 是获取 文件名及其扩展名,但对文件夹名也同样适用。加上 x 参数是防止文件夹名中含有点号。
for的详细教程可以看本人这篇文章:【原创】批处理for语句从入门到精通(https://bbs.et8.net/bbs/showthread.php?t=1022458
发表新主题 关闭主题

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 17:34:57.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号