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 获得指定目录内的文件夹名称等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)