[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程批处理在线视频分享
返回列表 发帖

[文本处理] [已解决]如何分析文本里面的内容建立文件夹?

本帖最后由 786021512 于 2018-12-5 14:37 编辑

假设我目录上有N个文本
文本内容如下
  1. &ACCESS ppcd
  2. &REL 847
  3. ;***********************************************************
  4. ;*                                                               
  5. ;* Robot               : Un060Rsb06(bathome)                                          
  6. ;*
  7. ;***********************************************************
复制代码
....
我判断如果第二行 是&REL 847
就建立YES文件夹否则建立HOME文件夹
然后识别Un060Rsb06建立UN文件夹
紧跟着建立UN060
最后在建立Un060Rsb06文件夹并且把文件放进去
也就是会把文件放入\UN\UN060\Un060Rsb06\YES
其他情况就会建立\UN\UN060\Un060Rsb06\NO

有个关键点是Un060Rsb06(bathome)不是固定的它有可能也是
sbb06Rb06(bathome)
所以不碰判断字符个数来实现
还有个就是需要把子目录的文件也读取出来
并且统一是大写
最后是两种格式一种是.txt 还一种是.log
大神们有啥好办法

本帖最后由 WHY 于 2018-12-5 00:01 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. rem 移动到 E:\Test
  3. set "dstFolder=E:\Test"
  4. for /f "tokens=1,3delims=:" %%i in ('findstr /i /s /r /c:"^;\*.*: *[^0-9][^0-9]*[0-9][0-9]*[^0-9][^0-9]*" *.txt *.Log') do (
  5.     rem 取第二行
  6.     (for %%m in (a a) do set /p s=)<"%%i"
  7.     if /i "!s!" == "&REL 847" (set FD4=YES) else (set FD4=NO)
  8.     for /f "delims=(" %%m in ("%%j") do (
  9.         for /f "tokens=*" %%m in ("%%m") do set "FD3=%%m"
  10.     )
  11.     for /f "tokens=1* delims=1234567890" %%m in ("!FD3!") do (
  12.         set "FD2=!FD3:%%n=!"
  13.         set "fd=%dstFolder%\%%m\!FD2!\!FD3!\!FD4!"
  14.         if not exist "!fd!\" (
  15.             rem 转换成大写字母
  16.             for %%k in (Q W E R T Y U I O P A S D F G H J K L Z X C V B N M) do set "fd=!fd:%%k=%%k!"
  17.             echo;md "!fd!\"
  18.         )
  19.         echo;move "%%i" "!fd!\"
  20.     )
  21. )
  22. pause
复制代码
大写转换搞复杂了,改一下。
1

评分人数

    • 786021512: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

  1. @if(0)==(0) echo off
  2. dir /b /s *.txt *.Log | cscript //nologo //e:jscript "%~f0"
  3. pause & goto :EOF
  4. @end
  5. var dstFolder = 'E:\\Test\\';      //移动到 E:\Test 目录
  6. //var dstFolder = WSH.ScriptFullName.replace(/[^\\]+$/, '');
  7. var fso = new ActiveXObject('Scripting.FileSystemObject');
  8. while(!WSH.StdIn.AtEndOfStream){
  9.     var strFile = WSH.StdIn.ReadLine();
  10.     var objFile = fso.OpenTextFile(strFile, 1);
  11.     var str = objFile.ReadAll();
  12.     objFile.Close();
  13.     var m1 = str.match(/^[^\r\n]*\r?\n&REL 847/i);
  14.     var m2 = str.match(/^;\*.*: *(\D+)(\d+)([^(]+)\(/m);
  15.     if(!m2) continue;
  16.     var fd = dstFolder + m2[1] + '\\' + m2[1]+m2[2] + '\\' + m2[1]+m2[2]+m2[3]+ '\\' + (m1 ? 'YES' : 'NO');
  17.     createFolder(fd.toUpperCase());
  18.     var name = strFile.replace(/.*\\/, '');
  19.     if(!fso.FileExists(fd + '\\' + name)) fso.getFile(strFile).Move(fd + '\\');
  20. }
  21. function createFolder(strFolder) {
  22.     var arr = strFolder.split('\\');
  23.     var fd  = arr[0];
  24.     for(var i=1; i<arr.length; i++) {
  25.         fd += '\\' + arr[i];
  26.         if(!fso.FolderExists(fd)) fso.CreateFolder(fd);
  27.     }
  28. }
复制代码
1

评分人数

    • 786021512: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

返回列表