使用csv创建批处理目录/文件夹

问题描述:

我需要创建大量需要从csv文件创建的目录和子目录。我认为使用批次是最简单的方法。然而,我不太熟悉批次,所以我正在寻找帮助。使用csv创建批处理目录/文件夹

下面是CSV的某些部分(有超过800线):

FolderID,FolderName,FolderParentID,OwnerID,TopLevelFolderID 
1,My Folder,NULL,1,1 
2,My Folder,NULL,2,2 
5,Test,NULL,3,5 
195,My Folder,NULL,132,195 
174,My Folder,NULL,133,174 
133,My Folder,NULL,135,133 
154,My Folder,NULL,139,154 
134,My Folder,NULL,140,134 
137,My Folder,NULL,141,137 
136,My Folder,NULL,145,136 
191,My Folder,NULL,148,191 
160,My Folder,NULL,150,160 
147,My Folder,NULL,152,147 
165,My Folder,NULL,153,165 
157,My Folder,NULL,154,157 
158,My Folder,NULL,155,158 
142,My Folder,NULL,157,142 
192,My Folder,NULL,158,192 
153,My Folder,NULL,159,153 
186,My Folder,NULL,160,186 
177,My Folder,NULL,162,177 

我通过它认为,这是基本的结构应该如何:

Create Folder 1 per OwnerID with OwnerID as folder name 
"/OwnerID/" 


if FolderParentID = NULL and/or is same as TopLevelFolderID, then create folder with  FolderID in OwnerID folder. 
"/OwnerID/FolderID/" 



if FolderParentID = notNULL, and FolderParentID is same as TopLevelFolderID, then create folder with FolderID in FolderParentID 
"/OwnerID/FolderParentID/FolderID/" 


if FolderParentID = notNULL, adn FolderParentID is not same as TopLevelFolderID, then create folder with FolderID in FolderID form level above 
"/OwnerID/FolderParentID/FolderID/FolderID/" 

任何帮助将不胜感激,并提前致谢!

格式编辑.. google.com

@ECHO OFF 
SETLOCAL 
SET "destdir=c:\destdir" 
FOR /f "skip=1tokens=1-5delims=," %%a IN (q20592270.txt) DO (
    ECHO MD "%destdir%\%%d" 
) 
FOR /f "skip=1tokens=1-5delims=," %%a IN (q20592270.txt) DO (
    IF "%%c"=="NULL" ECHO MD "%destdir%\%%d\%%a" 
    IF "%%c"=="%%e" ECHO MD "%destdir%\%%d\%%a" 
) 
FOR /f "skip=1tokens=1-5delims=," %%a IN (q20592270.txt) DO (
    IF NOT "%%c"=="NULL" IF "%%c"=="%%e" ECHO MD "%destdir%\%%d\%%c\%%a" 
) 
FOR /f "skip=1tokens=1-5delims=," %%a IN (q20592270.txt) DO (
    IF NOT "%%c"=="NULL" IF NOT "%%c"=="%%e" ECHO MD "%destdir%\%%d\%%c\%%a\%%a" 
) 
GOTO :EOF 

这将创建所需的目录。显然,你需要指定目的地。

为了测试目的,所需的命令仅仅是ECHO。验证命令是否正确后,将每个ECHO MD更改为MD以实际创建目录。

请注意,当试图创建一个已经存在的目录时,将显示一条错误消息。这是无害但丑陋的。您可以通过将2>nul添加到每个MD ...行来导致错误消息被抑制。

q20592270.txt只是我用于测试数据的文件的名称(它总是有第三个字段“NULL”)。您需要替换您的.csv文件的名称。

我假设数据实际上包含单词“NULL”,它不是简单的空字段。

@echo off 
setlocal EnableDelayedExpansion 

rem Initialize the variable that store field names 
set "fieldNames=" 

rem Process the csv file 
for /F "tokens=1-5 delims=," %%a in (theFile.csv) do (

    rem Get field names from first line 
    if not defined fieldNames (
     set "fieldNames=%%a %%b %%c %%d %%e" 
    ) else (

     rem Copy field values to field names 
     for /F "tokens=1-5" %%i in ("!fieldNames!") do (
     set "%%i=%%a" & set "%%j=%%b" & set "%%k=%%c" & set "%%l=%%d" & set "%%m=%%e" 
    ) 

     rem Create Folder 1 per OwnerID with OwnerID as folder name 
     ECHO md "\!OwnerID!" 

     rem if FolderParentID = NULL and/or is same as TopLevelFolderID, then create folder with  FolderID in OwnerID folder. 
     if !FolderParentID! equ NULL ECHO md "\!OwnerID!\!FolderID!" 
     if !FolderParentID! equ !TopLevelFolderID! ECHO md "\!OwnerID!\!FolderID!" 

     rem if FolderParentID = notNULL, and FolderParentID is same as TopLevelFolderID, then create folder with FolderID in FolderParentID 
     if !FolderParentID! neq NULL if !FolderParentID! equ !TopLevelFolderID! ECHO md "\!OwnerID!\!FolderParentID!\!FolderID!" 

     rem if FolderParentID = notNULL, adn FolderParentID is not same as TopLevelFolderID, then create folder with FolderID in FolderID form level above 
     if !FolderParentID! neq NULL if !FolderParentID! neq !TopLevelFolderID! ECHO md "\!OwnerID!\!FolderParentID!\!FolderID!\!FolderID!" 

     echo ------------------------------------- 

    ) 

) 

输出例如:

md "\1" 
md "\1\1" 
------------------------------------- 
md "\2" 
md "\2\2" 
------------------------------------- 
md "\3" 
md "\3\5" 
------------------------------------- 
md "\132" 
md "\132\195" 
------------------------------------- 
md "\133" 
md "\133\174" 
------------------------------------- 
md "\135" 
md "\135\133"