[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. echo {>yiwuyun.txt
  3. echo FS=",">>yiwuyun.txt
  4. echo if(FNR==37){a1=$4}>>yiwuyun.txt
  5. echo if(FNR==38){a2=$4}>>yiwuyun.txt
  6. echo if(FNR==39){a3=$4;printf "%%s,%%s,%%s\n",a1,a2,a3}>>yiwuyun.txt
  7. echo }>>yiwuyun.txt
  8. gawk -f yiwuyun.txt *.csv>new.csv
  9. if exist yiwuyun.txt del yiwuyun.txt
复制代码

TOP

回复 31# yiwuyun


    感谢大神指导 我这执行完全啊没反应。

TOP

回复 31# yiwuyun


    能不能把19楼的给修改下啊,19楼的完全符合我的设想,就是最后生成表格格式有点错误‘

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /l %%i in (37,1,39) do (
  3. set /a n=%%i-1
  4. set /a n1=%%i-36
  5. for /f "delims=" %%a in ('dir /b *.csv') do (
  6.         for /f "skip=!n! delims=, tokens=4" %%b in ('type "%%a"') do (
  7.                 if "!a!"=="" >>file!n1!.txt echo %%b
  8.                 set a=1
  9.         )
  10.         set a=
  11. )
  12. )
  13. set /a n=3
  14. set /a m=0
  15. set str=
  16. type nul>new.csv
  17. for /l %%a in (1,1,!n!) do (
  18.   set /a n1=0
  19.   for /f %%b in ('type file%%a.txt') do (
  20.     set /a n1+=1
  21.     for /l %%c in (!n1!,1,!n1!) do (
  22.        set file%%a.row%%c=%%b
  23.     )
  24.   )
  25.   if !n1! gtr !m! (set /a m=!n1!)
  26. )
  27. for /l %%a in (1,1,!m!) do (
  28.   for /l %%b in (1,1,!n!) do (
  29.     if "!file%%b.row%%a!"=="" (set /a file%%b.row%%a=0)
  30.     set "str=!str!!file%%b.row%%a!   "
  31.   )
  32.   echo !str!>>new.csv
  33.   set str=
  34. )
复制代码
试试。

TOP

给你两参考 结果显示符合不 可自己修改下
  1. @if(0)==(0) ECHO OFF
  2. CScript.exe -NoLogo -E:JScript %0 "%~dp0test.csv" "D37 D38 D39"
  3. pause&exit
  4. @end
  5. var filePath=  WSH.Arguments.Item(0)
  6. var oXL = new ActiveXObject("Excel.application");
  7. var oWB = oXL.Workbooks.open(filePath);
  8. oWB.worksheets(1).select();
  9. var oSheet = oWB.ActiveSheet;
  10. var ar = WSH.Arguments.Item(1).split(' ');
  11. var t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  12. var arr = [],len = ar.length;
  13. for (var i = 0; i < len; i++) {
  14.   var n = t.indexOf(ar[i].slice(0,1))+1;
  15.   var m = ar[i].slice(1);
  16.   arr.push(oSheet.Cells(m,n));
  17. }
  18. WSH.echo(arr);
  19. oXL.Quit();
复制代码
  1. @if(0)==(0) ECHO OFF
  2. CScript.exe -NoLogo -E:JScript %0 <test.csv "D37 D38 D39"
  3. pause&exit
  4. @end
  5. var arr = WSH.StdIn.Readall().split('\r\n');
  6. var len = arr.length;
  7. for (var i = 0; i < len; i++) {
  8.   arr[i] = arr[i].replace(/,,/gi,',\s,').split(/\,/);
  9. }
  10. var ar = WSH.Arguments.Item(0).split(' ');
  11. var t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  12. var tarr = [],len = ar.length;
  13. for (var i = 0; i < len; i++) {
  14.   var n = t.indexOf(ar[i].slice(0,1));
  15.   var m = ar[i].slice(1)-1;
  16.   tarr.push(arr[m][n]);
  17. }
  18. WSH.echo(tarr)
复制代码

TOP

回复 34# yiwuyun


    感谢提供代码。。可惜实验失败。。没有刷出数据。 拿三楼的附件 复制10份,提取固定位置数据汇成一新的表格;19楼能提取数据也真确就是格式 我要求是三列 他那个是三行。。。求改写

TOP

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set /a start=36
  4. for /l %%a in (37,1,39) do (
  5.   set /a fileNumber=%%a-!start!
  6.   set /a skip=0
  7.   for /f "delims=" %%b in ('dir /b *.csv') do (
  8.      for /f "tokens=4 delims=," %%c in ('type %%b') do (
  9.        set /a skip+=1
  10.        if "!skip!"=="%%a" (
  11.          echo %%c>>file!fileNumber!.txt
  12.        )
  13.      )
  14.      set /a skip=0
  15.   )
  16. )
  17. set /a n=3
  18. set /a m=0
  19. set str=
  20. type nul>new.csv
  21. for /l %%a in (1,1,!n!) do (
  22.   set /a n1=0
  23.   for /f %%b in ('type file%%a.txt') do (
  24.     set /a n1+=1
  25.     for /l %%c in (!n1!,1,!n1!) do (
  26.        set file%%a.row%%c=%%b
  27.     )
  28.   )
  29.   if !n1! gtr !m! (set /a m=!n1!)
  30. )
  31. for /l %%a in (1,1,!m!) do (
  32.   for /l %%b in (1,1,!n!) do (
  33.     if "!file%%b.row%%a!"=="" (set /a file%%b.row%%a=0)
  34.     set "str=!str!!file%%b.row%%a!   "
  35.   )
  36.   echo !str!>>new.csv
  37.   set str=
  38. )
复制代码

TOP

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set /a start=36
  4. for /l %%a in (37,1,39) do (
  5.   set /a fileNumber=%%a-!start!
  6.   set /a skip=0
  7.   for /f "delims=" %%b in ('dir /b *.csv') do (
  8.      for /f "tokens=4 delims=," %%c in ('type %%b') do (
  9.        set /a skip+=1
  10.        if "!skip!"=="%%a" (
  11.          echo %%c>>file!fileNumber!.txt
  12.        )
  13.      )
  14.      set /a skip=0
  15.   )
  16. )
  17. set /a n=3
  18. set /a m=0
  19. set str=
  20. type nul>new.csv
  21. for /l %%a in (1,1,!n!) do (
  22.   set /a n1=0
  23.   for /f %%b in ('type file%%a.txt') do (
  24.     set /a n1+=1
  25.     for /l %%c in (!n1!,1,!n1!) do (
  26.        set file%%a.row%%c=%%b
  27.     )
  28.   )
  29.   if !n1! gtr !m! (set /a m=!n1!)
  30. )
  31. for /l %%a in (1,1,!m!) do (
  32.   for /l %%b in (1,1,!n!) do (
  33.     if "!file%%b.row%%a!"=="" (set /a file%%b.row%%a=0)
  34.     if "%%b"=="!n!" (
  35.       set "str=!str!!file%%b.row%%a!"
  36.     ) else (
  37.       set "str=!str!!file%%b.row%%a!,"
  38.     )
  39.   )
  40.   echo !str!>>new.csv
  41.   set str=
  42. )
复制代码
逗号分隔

TOP

也来一个:
  1. @set @n=0;/* & echo off
  2. set "cell=D37 D38 D39"
  3. for %%a in (*.csv) do (
  4.         cscript -nologo -e:jscript "%~0"<"%%a">>$ "%cell%"
  5. )
  6. move $ new.csv
  7. pause & exit & */
  8. arg = WScript.Arguments(0).split(" ");
  9. txt = WScript.StdIn.ReadAll();
  10. arTxt = txt.replace(/(\s*\n)+$/, "").split("\r\n");
  11. chr = "0ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  12. arCell = [];
  13. for (i=0; i<arg.length; i++) {
  14.         m = arg[i].match(/\d+$/)[0] - 1;
  15.         n = ("0" + arg[i]).match(/(..)\d+$/)[1].toUpperCase();
  16.         n1 = chr.indexOf(n.substr(0, 1));
  17.         n2 = chr.indexOf(n.substr(1));
  18.         n = n1 * 26 + n2 - 1;
  19.         arCell.push(arTxt[m].split(",")[n]);
  20. }
  21. WScript.Echo(arCell.join(","))
复制代码
1

评分人数

TOP

再来一下:
  1. arrCell = Array("D37", "D38", "D39") ''需要提取的单元格
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. For Each file in fso.GetFolder(".").Files
  4.         If LCase(Right(file, 4)) = ".csv" Then
  5.                 Set f = fso.OpenTextFile(file, 1)
  6.                 txt = f.ReadAll : f.Close
  7.                 str = str & getCellsData(txt) & vbCrLf
  8.         End If
  9. Next
  10. fso.OpenTextFile("new.csv", 2, true).Write str
  11. MsgBox "OK"
  12. Function getCellsData(ByVal txt)
  13.         '' csv文本分割成数组
  14.         arrTxt = Split(txt, vbCrLf)
  15.         strChr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  16.         ''建立正则表达式
  17.         Set re = New RegExp
  18.         ''正则表达式模式,最大支持到ZZ列
  19.         re.Pattern = "^([a-z]{1,2})(\d+)$"
  20.         re.IgnoreCase = true
  21.         For i = 0 to UBound(arrCell)
  22.                 n = re.Execute(arrCell(i))(0).SubMatches(0)
  23.                 n = UCase(Right("0" & n, 2))
  24.                 n1 = InStr(strChr, Left(n, 1))
  25.                 n2 = InStr(strChr, Mid(n, 2))
  26.                 n = n1 * 26 + n2 - 1
  27.                 m = re.Execute(arrCell(i))(0).SubMatches(1) - 1
  28.                 s = s & "," & Split(arrTxt(m), ",")(n)
  29.         Next
  30.         getCellsData = Mid(s, 2)
  31. End Function
复制代码

TOP

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set /a rowStart=37
  4. set /a rowEnd=39
  5. set /a colNumber=4
  6. set "fileSeperator=,"
  7. set "fileType=csv"
  8. if "!fileType!"=="csv" (
  9.   set "allFile=*.csv"
  10. ) else (
  11.   set "allFile=*.txt"
  12. )
  13. if "!fileSeperator!"=="," (
  14.   set outputFile=new.csv
  15. ) else (
  16.   set outputFile=new.txt
  17. )
  18. set /a fileCount=!rowEnd!-!rowStart!+1
  19. for /l %%a in (!rowStart!,1,!rowEnd!) do (
  20.   set /a fileNumber=%%a-!rowStart!+1
  21.   set /a skip=0
  22.   for /f "delims=" %%b in ('dir /b !allFile!') do (
  23.      for /f "tokens=%colNumber% delims=," %%c in ('type %%b') do (
  24.        set /a skip+=1
  25.        if "!skip!"=="%%a" (
  26.          echo %%c>>file!fileNumber!.txt
  27.        )
  28.      )
  29.      set /a skip=0
  30.   )
  31. )
  32. set /a n=!fileCount!
  33. set /a m=0
  34. set str=
  35. type nul>!outputFile!
  36. for /l %%a in (1,1,!n!) do (
  37.   set /a n1=0
  38.   for /f %%b in ('type file%%a.txt') do (
  39.     set /a n1+=1
  40.     for /l %%c in (!n1!,1,!n1!) do (
  41.        set file%%a.row%%c=%%b
  42.     )
  43.   )
  44.   if !n1! gtr !m! (set /a m=!n1!)
  45. )
  46. for /l %%a in (1,1,!m!) do (
  47.   for /l %%b in (1,1,!n!) do (
  48.     if "!file%%b.row%%a!"=="" (set /a file%%b.row%%a=0)
  49.     if "%%b"=="!n!" (
  50.       set "str=!str!!file%%b.row%%a!"
  51.     ) else (
  52.        if "!fileSeperator!"=="," (
  53.          set "str=!str!!file%%b.row%%a!,"
  54.        ) else (
  55.          set "str=!str!!file%%b.row%%a!    "
  56.        )
  57.     )
  58.   )
  59.   echo !str!>>!outputFile!
  60.   set str=
  61. )
  62. for /l %%a in (1,1,!fileCount!) do (
  63.   if exist ".\file%%a.txt" del ".\file%%a.txt"
  64. )
复制代码
这个稍稍通用一点

TOP

回复 38# yiwuyun


    大神NB啊 成了 ,就是小白用着有点蒙圈;能不能改成 输入 单元格刷数据的啊,比如 提示输入C2 .D8. F20 就可以刷这三位置的数据啊?
或者跟19楼似得刷取过程有个提示的。

TOP

回复 40# apang


    运行没反应啊  我小白 也看不懂

TOP

回复 39# apang


    你这个数据少能刷;我这个文件有200-500个文件 刷一个要50分钟。。。。。

TOP

除非单个文件几百兆上G级,否则不可能“刷一个要50分钟”。
如此,你应该在顶楼就交代清楚
顶楼不说清楚,一会想实现这样一会又想那样,什么心态?“我是小白”很了不起吗?
给你代码不会用,活该你慢。

TOP

返回列表