【问题标题】:Batch directory/folder create with csv使用 csv 批量创建目录/文件夹
【发布时间】:2013-12-15 07:28:59
【问题描述】:

我需要创建很多我需要从 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

【问题讨论】:

    标签: batch-file csv directory


    【解决方案1】:
    @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
    

    这应该会创建所需的目录。显然,您需要指定目的地。

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

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

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

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

    【讨论】:

      【解决方案2】:
      @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"
      

      【讨论】:

        猜你喜欢
        • 2016-03-16
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多