Windows 将具有属性的目录批处理为csv

Windows 将具有属性的目录批处理为csv,windows,csv,batch-file,for-loop,dir,Windows,Csv,Batch File,For Loop,Dir,我花了很多时间搜索这个(和其他)网站,试图找出这个问题,但我最终承认我被卡住了。我是一个初学者,所以如果我的术语/解释令人困惑,我提前道歉 操作系统:Windows7 我正在处理一个批处理文件,该文件将创建一个.csv文件,其中包含批处理文件当前文件夹位置的所有文件夹和文件(包括子文件夹)的属性和路径。我正在对所有可能的属性场景进行迭代。下面是对我的代码的解释: **在csv文件中创建标题: @echo on echo Folder vs. File,Hidden,System Folder,R

我花了很多时间搜索这个(和其他)网站,试图找出这个问题,但我最终承认我被卡住了。我是一个初学者,所以如果我的术语/解释令人困惑,我提前道歉

操作系统:Windows7

我正在处理一个批处理文件,该文件将创建一个.csv文件,其中包含批处理文件当前文件夹位置的所有文件夹和文件(包括子文件夹)的属性和路径。我正在对所有可能的属性场景进行迭代。下面是对我的代码的解释:

**在csv文件中创建标题:

@echo on
echo Folder vs. File,Hidden,System Folder,Read Only,Path > FoldersAndFilesWithAttributes.csv
**将具有特定属性的文件和文件夹名称复制到临时.txt文件

dir %~dp0 /s /n /a:dhsr /b >> FoldersAndFiles.txt
del FoldersAndFiles.txt
**将属性附加到文件夹/文件路径并放入csv文件中

for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Hidden,System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv
**删除临时.txt文件

dir %~dp0 /s /n /a:dhsr /b >> FoldersAndFiles.txt
del FoldersAndFiles.txt
问题 我不确定问题在哪里,因为出于某种原因,它在某些文件夹中有效,但在其他文件夹中无效。有时我只在具有已知属性的文件存在时获取标题,有时不存在完整路径,有时我什么也得不到。我想可能是我覆盖临时文件的速度太快了,所以我为每个场景创建了唯一的.txt文件,但仍然不起作用

**以下是我的完整代码:

@echo off

echo Folder vs. File,Hidden,System Folder,Read Only,Path > FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:dhsr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Hidden,System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:dhs-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Hidden,System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:dh-sr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Hidden,Not System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:dh-s-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Hidden,Not System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:d-hsr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Not Hidden,System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:d-hs-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Not Hidden,System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:d-h-sr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Not Hidden,Not System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:d-h-s-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo Folder,Not Hidden,Not System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-dhsr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Hidden,System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-dhs-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Hidden,System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-dh-sr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Hidden,Not System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-dh-s-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Hidden,Not System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-d-hsr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Not Hidden,System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-d-hs-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Not Hidden,System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-d-h-sr /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Not Hidden,Not System,ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv

dir %~dp0 /s /n /a:-d-h-s-r /b >> FoldersAndFiles.txt
for /f "tokens=*" %%i in (FoldersAndFiles.txt) do echo File,Not Hidden,Not System,Not ReadOnly,%%i >> FoldersAndFilesWithAttributes.csv


del FoldersAndFiles.txt
谢谢你的帮助, 肖恩

根据:

使用
%~aI
显示文件的扩展属性<代码>用于的
%%~aI
识别9个NTFS文件属性。文件属性的扩展 使用每个可识别的属性生成一系列9个破折号 用字母替换破折号。没有可识别属性的文件 或者如果没有设置,则将扩展为9个破折号,如下所示:
-----------

您可以使用如下标题制作准确的
csv
(修改文件掩码以将输出缩小到合理大小):

输出

d:\bat>D:\bat\SO\31079628new.bat *new

d:\bat>type files\FoldersAndFilesWithAttributes.csv
"d","r","a","h","s","c","o","t","l","file"
"","","a","","","","","","","d:\bat\files\pathnew.txt"
"","r","a","","","","","","","d:\bat\files\bubu\New Text Document.txt"
"","","a","h","","","","","","d:\bat\files\numeric\New Text Document.txt"
"","","a","","","","","","","d:\bat\SO\28526273new"
"","","a","","","","","","","d:\bat\SO\31079628new.bat"
"d","","","","","","","","","d:\bat\SO\New folder"
"","","a","","","c","","","","d:\bat\SU\New Text Document.txt"

d:\bat>

也许这种方法会有所帮助:。它使用不同的属性,但我假设您的属性也可以通过wmi访问。wmic能够创建csv文件。谢谢Aacini-我想我真的发现了错误。我在试图运行脚本的计算机上没有管理员权限,因此在尝试在我的C:\文件夹中创建文件时出错。我在另一台PC上测试了它(具有管理员权限),它运行正常。今天我获得了测试计算机的管理员用户/pwd,并且能够在我的C:\驱动器上运行它。我将尝试一下你的代码,因为我相信它更有效。出于好奇,您是否看到我的代码无法工作的任何原因(以防我错误地认为它可以工作)。谢谢JosefZ-查看我对上面Acini的回复-我想我可能已经发现了错误。我没有意识到有那么多的属性——我也会尝试一下。另外,正如我在上面问Aacini的那样,你看到我的代码不能工作的原因了吗?我知道这可能不是最好的方法,但我一直在学习,希望确保我的成绩不会出现假阳性。再次感谢你,肖恩。刚刚测试了代码-效果很好-很简单。我做了一个更改,将“>文件夹和文件…”移到了末尾。这将我的输出缩短到每个文件夹/文件一行。再次感谢。
d:\bat>D:\bat\SO\31079628new.bat *new

d:\bat>type files\FoldersAndFilesWithAttributes.csv
"d","r","a","h","s","c","o","t","l","file"
"","","a","","","","","","","d:\bat\files\pathnew.txt"
"","r","a","","","","","","","d:\bat\files\bubu\New Text Document.txt"
"","","a","h","","","","","","d:\bat\files\numeric\New Text Document.txt"
"","","a","","","","","","","d:\bat\SO\28526273new"
"","","a","","","","","","","d:\bat\SO\31079628new.bat"
"d","","","","","","","","","d:\bat\SO\New folder"
"","","a","","","c","","","","d:\bat\SU\New Text Document.txt"

d:\bat>
@echo off
setlocal EnableDelayedExpansion

(
echo Folder vs. File,Hidden,System,Read Only,Path
for /F "delims=" %%a in ('dir /S /B /A') do (
   set "attribs=%%~Aa"
   if "!attribs:D=!" neq "!attribs!" (set "type=Folder") else set "type=File"
   set "hidden=Not Hidden"
   if "!attribs:H=!" neq "!attribs!" set "hidden=Hidden"
   set "system=Not System"
   if "!attribs:S=!" neq "!attribs!" set "system=System"
   set "readOnly=Not Read Only"
   if "!attribs:R=!" neq "!attribs!" set "readOnly=Read Only"
   echo !type!,!hidden!,!system!,!readOnly!,%%~Fa
)
) > FoldersAndFilesWithAttributes.csv