hurry307 发表于 2017-9-16 19:03:05

批处理找文件

我想通过批处理找到磁盘里的GHO文件,并且获取该文件的路径(包括盘符,并且我不知道GHO文件到底是在C盘,还是D盘,还是什么盘),并且把获取的GHO文件的路径值付给某个参数
比如
GHO文件在D盘根目录下d:\bak.gho
SET GETPATH
set GHOPATH=GETPATH

tools241 发表于 2017-9-16 19:23:48

本帖最后由 tools241 于 2017-9-17 11:20 编辑

一.假设要找的是文件夹 ?:\bak.gho
for %%i in ( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do if exist %%i:\bak.gho set GETPATH=%%i:\bak.gho

二.找出所有的 *.GHO 档, 将清单存到 C:\tmp.txt
copy/YnulC:\tmp.txt2>nul>nul
for %%i in ( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do find_Unix.exe %%i\|tr.exe "\n" "?" | sed -e "s:?:?/:g" | tr "?" "\r" | tr "/" "\n" | grep.exe "\.$" >> C:\tmp.txt
注: 此处的 find.exe , tr.exe , sed.exe 及 grep.exe 为( 自 Linux 移植到DOS 之下的 ) "仿Linux/Unix" 命令, 而非 系统的 find.exe
如何利用 仿unix/linux命令 sed 一次替换文字中的 "某些相似性的字串" ==>
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=383106
* 范例8:找出所有的 *.GHO 档, 将清单存到 C:\tmp.txt
del/QC:\tmp.txt 2>nul >nul
for %%i in ( A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ) do find_Unix.exe %%i\|tr.exe "\n" "?" | sed -e "s:?:?/:g" | tr "?" "\r" | tr "/" "\n" | grep.exe "\.$" >> C:\tmp.txt

注: 本例中已将仿Linux的find.exe改名为find_Unix.exe以免与Windows系统的find.exe同名产生混淆.
列出 C:\ 下的所有档案清单                                                                -- find_Unix.exe C:\
将每一行中Linux的new line码(Ctrl+j)换成 ?                                        -- tr.exe "\n" "?"
将全部的 ? 改成 ?/ ( s 表示 "替代" , g 表示全部而非一个 )                   -- sed.exe -e "s:?:?/:g"
将每一行中 ?/ 换成 Windows的return(Ctrl+M)码 + new line码(Ctrl+j)-- tr.exe "?" "\r" | tr "/" "\n"
找出 "行末" 含 .GHO或 *.gho 的各行( $ 表示位于最后 )                     -- grep.exe "\.$"

hurry307 发表于 2017-9-16 19:58:54

谢谢,明天试下

nttwqz 发表于 2017-9-16 20:31:19

@echo off
setlocal enabledelayedexpansion
rem 遍历能访问的所有分区中的所有文件夹及其子目录
echo 查找中...
for /f "tokens=2*" %%a in ('fsutil fsinfo drives') do (
        for /d %%c in (%%a %%b) do (
                pushd %%c 2>nul&&for /r %%d in (*.wim) do (
                        set /a n+=1
                        echo %%~d&set ghopath-!n!=%%d
                )
        )
)
cls
echo 找到的文件数量:!n! 个
for /l %%a in (1,1,!n!) do echo [%%a]        !ghopath-%%a!
set /p select=请选择:
rem 下面这句请自行更改
echo %select%
pause

qpliuxin 发表于 2017-9-18 15:11:50

本帖最后由 qpliuxin 于 2017-9-18 15:17 编辑

nttwqz 发表于 2017-9-16 20:31


你好,这个批处理运行后
echo %select%
显示的是我输入的序列号,而不是文件路径,麻烦问下如何修改啊




nttwqz 发表于 2017-9-18 16:19:35

qpliuxin 发表于 2017-9-18 15:11
你好,这个批处理运行后
echo %select%
显示的是我输入的序列号,而不是文件路径,麻烦问下如何修改 ...

你这个,可以说批处理基本就不会啊。

!ghopath-%select%!代表你选择的gho文件

qpliuxin 发表于 2017-9-18 23:49:05

nttwqz 发表于 2017-9-18 16:19
你这个,可以说批处理基本就不会啊。

!ghopath-%select%!代表你选择的gho文件

谢谢,没学过批处理,看的也有点理解错了,这个是赋路径给程序,我就想获取文件路径该怎么修改呢

nttwqz 发表于 2017-9-19 00:14:45

qpliuxin 发表于 2017-9-18 23:49
谢谢,没学过批处理,看的也有点理解错了,这个是赋路径给程序,我就想获取文件路径该怎么修改呢

!ghopath-%select%!变量的值就是你选择的GHO文件的路径,也就是说,你选择的文件的文件路径已经赋值给变量!ghopath-%select%!,你还有怎么赋值???

527104427 发表于 2017-9-19 13:18:21

服了。。。。。。。

nttwqz 发表于 2017-9-19 14:03:34

527104427 发表于 2017-9-19 13:18
服了。。。。。。。

我也是醉了……

qpliuxin 发表于 2017-9-20 12:20:40

谢谢各位,打错了一个字母,结果一直错误,以后要多多学习啊

2012sdta1541 发表于 2017-10-31 00:30:35

本帖最后由 2012sdta1541 于 2017-10-31 02:32 编辑

怎么不能在系统自带的winre中恢复wim文件呢?
Dism.exe /Apply-Image /ImageFile:%select% /Index:1 /ApplyDir:c:\
错误: 87

原来文件路径输入“!ghopath-%select%!”才行啊。以下正常恢复了。
Dism.exe /Apply-Image /ImageFile:!ghopath-%select%! /Index:1 /ApplyDir:c:\

谢谢 nttwqz 提供的这个批处理,很方便。

x9tian 发表于 2017-11-3 22:20:15

527104427 发表于 2017-9-19 13:18
服了。。。。。。。

然而却没多少卵用
页: [1]
查看完整版本: 批处理找文件