批处理文件(.bat)怎么实现读取文件目录

批处理文件(.bat)怎么实现读取文件目录,第1张

dir /ad /b /s E:\CC

可得所有文件夹名。

dir /ad /b /s E:\CC > directory_listbat

可以把文件夹名(含路径)存入文件 directory_listbat

然后再处理。(例如,加入一列 rmdir 到 directory_listbat 中,再执行 directory_listbat)。

先删了E:\CC 再 mkdir CC 最方便,为什么要舍近求远呢?

@echo off & setlocal enabledelayedexpansion

title 已安装程序列表获取脚本 By 依梦琴瑶

:: 设置日志文件保存路径,不存在时会自动创建

set LogSaveDir=D:\MyLog

set UnKey=Microsoft\Windows\CurrentVersion\Uninstall

if /i "%PROCESSOR_IDENTIFIER:~,3%"=="x86" goto x86

echo 正在努力获取本机已安装程序列表,请稍后。。。

(echo Name^|^|Version^|^|Publisher^|^|InstallDate

for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>ymqy$

(for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\Wow6432Node\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

(for /f "delims=" %%i in ('reg query "HKCU\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

goto SortingList

:x86

(echo Name^|^|Version^|^|Publisher^|^|InstallDate

for /f "delims=" %%i in ('reg query "HKLM\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>ymqy$

(for /f "delims=" %%i in ('reg query "HKCU\SOFTWARE\%UnKey%"') do (

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayName 2^>nul') do (

        set "Name=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v DisplayVersion 2^>nul') do (

        set "Version=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v Publisher 2^>nul') do (

        set "Publisher=%%~k"

    )

    for /f "skip=2 tokens=2 delims= " %%j in ('reg query "%%~i" /v InstallDate 2^>nul') do (

        set "InstallDate=%%~k"

    )

    if not defined Name set Name=未知程序名

    if not defined Version set Version=未知版本号

    if not defined Publisher set Publisher=未知发布者

    if not defined InstallDate set InstallDate=未知安装时间

    if not "!Name!||!Version!||!Publisher!||!InstallDate!"=="未知程序名||未知版本号||未知发布者||未知安装时间" echo !Name!^|^|!Version!^|^|!Publisher!^|^|!InstallDate!

    set "Name=" & set "Version=" & set "Publisher=" & set "InstallDate="  

))>>ymqy$

:SortingList

for /f "skip=1 tokens=1 delims=[]" %%a in ('find /n "::SortingListVBS::" "%~0"') do set Line=%%~a

more +%Line% "%~0">SortingVBS

if not exist "%LogSaveDir%" md "%LogSaveDir%"

(cscript //nologo //e:jscript "SortingVBS" < ymqy$)>"%LogSaveDir%\%COMPUTERNAME%Log"

del /f/q ymqy$ SortingVBS

echo 本机已安装程序列表已输出至 "%LogSaveDir%\%COMPUTERNAME%Log"

pause

exit

::SortingListVBS::

var i = 0, arr = [], max = [];

var reg = /[^\x00-\xff]/g;

while(!WSHStdInAtEndOfStream){

    var strLine = WSHStdInReadLine();

    if(!/^\s$/test(strLine)) {

        arr[i] = strLinesplit('||');

        for(var j=0; j<arr[i]length; j++) {

            var len = arr[i][j]replace(reg, '')length;

            if(!max[j] || len > max[j]) max[j] = len;

        }

        i++;

    }

}

for(var i=0; i<arrlength; i++) {

    var s = '';

    for(var j=0; j<arr[i]length; j++) {

        var len = max[j] - arr[i][j]replace(reg, '')length;

        var space = ' ';

        for (var k=0; k<len; k++) space += ' ';

        s += arr[i][j] + space;

    }

    WScriptEcho(s);

}

最终的效果是这样的,比WMIC多了两个详细的项目,那就是软件发布者和安装时间。

1、在电脑中新建一个文本文档,双击打开该文档。

2、在页面中输入:@Echo off   dir /b>testtxt,在off位置开始切换到第二行。

3、选择文本文档的“文件”选项点击“另存为”,将新建文档改名为“复制文件名称bat”。

4、即可生成批处理文件,并将其拖入需要提取文件名的文件夹中。

5、双击打开批处理程序,在文件夹中就会出现一个“test”的TXT文档。

6、打开后即可看到页面中已经将文件夹的名称提取出来了。

因为快捷方式启动时路径是切换到起始路径的(按你的例子就是目标文件的路径c:\),所以这要求直接取值是不可能,除非取个巧,全盘搜索快捷方式的名称,然后对比起始路径,但没办法判断你是运行批处理本身还是运行快捷方式。

利用%0

%0是批处理本身的完整路径包含文件名

%~dp0 则是批处理的完整目录不包含文件各

@echo off

cd /d %~dp0

pause>nul

以上就是关于批处理文件(.bat)怎么实现读取文件目录全部的内容,包括:批处理文件(.bat)怎么实现读取文件目录、如何通过bat导出windows已安装程序列表,并且保存为文件名为计算机名.log到指定的目录下、批处理bat 获得指定目录内的文件夹名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10146135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存