Board logo

标题: [文本处理] [已解决]批处理怎么提取csv文件中的单元格汇总到一个新的表格里啊? [打印本页]

作者: haichuan5121    时间: 2014-12-14 21:35     标题: [已解决]批处理怎么提取csv文件中的单元格汇总到一个新的表格里啊?

一个文件夹下有一堆CSV文件,怎么才能提取每个csv文件中的一个单元格,合并汇总到一个新的表格里啊;
比如附件1.csv 里 我想提取当前文件夹下所有csv文件 D37 的内容 到新表里,怎么实现啊,求大神指教
        Lot Start Time        2011-5-4        4:48:22                               
Lot End Time                2011-5-4        5:12:12                               
Cassette ID                1AC-0999                                       
Lot ID                1AGX140551                                       
Port No.                3                                       
                                                       
Processed Substrate                20                                       
Total Processed Substrate                349000                                       
                                                       
Sub. No.                3001                                       
Cassette Slot No.                1                                       
Process Recipe                A-ITO400A                                       
Platen Used                Platen1                                       
Recipe Type                SMD-Product                                       
SetUp Recipe                A-ITO SETUP                                       
                                                       
                Step1                Step2                Step3       
Recipe1                A-ITO 400A        ( S3 )                               
                                                       
L1 Chamber In                                                       
L1 Waiting Time of Loading        [sec]        0                                77       
L1 Heat temp        [C]                24        23        26        24       
L1 Heating Program No..        [no.]                                        1       
L1 Keeping Program No..        [no.]                                        1       
                                                       
Chamber                S3(CA32)                                       
        Units        Set        Ave        Min        Max        Act       
Process Start                2011-5-4        4:50:57                               
Process End                2011-5-4        4:51:07                               
S3 CA32 Platen Pos.        [Pos.]                                        0       
S3 CA32 Process Time        [sec]        999                        12               
S3 CA32 Sputter Time        [sec]        11                        10               
S3 MFC1 Ar        [sccm]        280        281        281        281               
S3 MFC2 O2        [sccm]        0        0        0        0               
S3 MFC3 H2O        [sccm]        3        3        3        3               
S3 DG Pressure        [Pa]                0.65        0.63        0.66               
S3 CA32 DC Power1        [kW]        60        60        59.9        60               
S3 CA32 DC Current1        [A]                145        143        146               
S3 CA32 DC Voltage1        [V]                413        409        420               
S3 CA32 Arc count1        [Times]                                        6       
S3 CA32 Target Life(1)        [kWh]                                        8975
作者: DAIC    时间: 2014-12-15 10:10

把你的csv压缩一下传上来
直接帖文本的话,格式就变了。
作者: haichuan5121    时间: 2014-12-15 11:24

回复 2# DAIC

附件如下 谢大神指导
作者: DAIC    时间: 2014-12-15 23:49

  1. gawk -F, "FNR==37{print $4}" *.csv > new.csv
复制代码

作者: haichuan5121    时间: 2014-12-16 11:06

DAIC 发表于 2014-12-15 23:49



    这段代码怎么用??
作者: haichuan5121    时间: 2014-12-16 11:07

回复 4# DAIC


    这段代码怎么用?
能详细点说嘛?我小白
作者: DAIC    时间: 2014-12-16 12:57

回复 6# haichuan5121


下载gawk.exe放到C:\Windows\System32文件夹下面
4楼的代码保存为test.bat
执行test.bat
作者: haichuan5121    时间: 2014-12-16 13:36

回复 7# DAIC


    ????,没反应啊,这个BAT放到哪执行啊 内容只需要这一行代码吗?
作者: DAIC    时间: 2014-12-16 13:45

回复 8# haichuan5121


    test.bat和csv放到同一个目录下面
作者: haichuan5121    时间: 2014-12-16 15:44

回复 9# DAIC


    生成的新csv文件 里面是空的啊???
作者: DAIC    时间: 2014-12-16 15:58

回复 10# haichuan5121


我用3楼的csv测试的时候可以得到结果。
你打开一个CMD窗口,cd到csv文件所在的目录,执行命令:
gawk -F, "FNR==37{print $4}" *.csv
有什么结果没?

你下载的哪个版本的gawk.exe呢?这是我的:
C:\Test>gawk --version
GNU Awk 4.1.0, API: 1.0
作者: 522235677    时间: 2014-12-16 16:10

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /b *.csv') do (
  3. for /f "skip=36 delims=, tokens=4" %%b in ('type "%%a"') do (
  4. if "!a!"=="" >>new.csv echo %%b
  5. set a=1
  6. )
  7. set a=
  8. )
  9. pause
复制代码

作者: haichuan5121    时间: 2014-12-16 16:23

回复 12# 522235677


    大神神武;能达到效果,大神能给解释下代码的作用吗》?还有就是能不能让你这个代码执行一遍后,第二遍再执行的时候数据不会重复提取啊!
作者: haichuan5121    时间: 2014-12-16 16:27

回复 12# 522235677


    如果要取多个数据怎么写?现在D37能取了,放在了A列  如果D38放B列呢怎么修改啊!
作者: 522235677    时间: 2014-12-16 16:33

skip=36 delims=, tokens=4

如果是B38 ,就把skip参数改为37,tokens改为2

你上面说的不重复数据指的是比如第一个表格里提取了60,第二个表格也提取到60就算重复了?
作者: haichuan5121    时间: 2014-12-16 16:39

回复 15# 522235677


    不是这意思 ,就是假如有五个CSV文件,你运行一遍BAT 有5个数据 你再运行一遍 那个表里就10个数据了
作者: 522235677    时间: 2014-12-16 16:43

回复 16# haichuan5121
  1. if exist new.csv del new.csv
复制代码
把这个代码放第二行
作者: haichuan5121    时间: 2014-12-16 16:48

本帖最后由 haichuan5121 于 2014-12-16 16:54 编辑

回复 17# 522235677


    如果每个表取两个数比如刚才的D37和D38 分别放A列和B列呢,你给的编码怎么才能直接执行 不需要按一下键盘呢,进一步的求解:能不能执行这个批处理后 新表里的数据能实现根据生成数据自动生成一曲线??
作者: 522235677    时间: 2014-12-16 17:21

回复 18# haichuan5121
  1. @echo off & setlocal enabledelayedexpansion
  2. if exist new.csv del new.csv
  3. for /f "delims=" %%a in ('dir /b *.csv') do (
  4. for /f "skip=36 delims=" %%b in ('type "%%a"') do (
  5. set str=%%b
  6. set str=!str:,=,$!
  7. for /f "delims=, tokens=4" %%c in ("!str!") do (
  8. if "!a!"=="" (
  9. if "!x!"=="" (set x=%%c) else (set y=%%c&>>new.csv echo !x:$=!,!y:$=!&set a=1)
  10. )
  11. )
  12. )
  13. set x=
  14. set a=
  15. )
  16. pause
  17. start "" new.csv
复制代码
好麻烦,只能这样了
作者: 522235677    时间: 2014-12-16 17:25

csv不支持生成曲线
作者: haichuan5121    时间: 2014-12-16 17:40

回复 19# 522235677


    好人做到底 ,授人与鱼不如授人与渔,如果再加数据怎么办啊,提取三个呢,每行编码大概给下功能备注吧,目的本来是提取三个数据的 所以先从提取一个请教了;
作者: haichuan5121    时间: 2014-12-16 17:44

回复 20# 522235677


    csv可以用EXCEL打开啊
作者: haichuan5121    时间: 2014-12-16 17:49

回复 20# 522235677


    取两个数的代码里面我也没有看到37字样啊 如果我想改成查询其他行的数据怎么办啊!
作者: haichuan5121    时间: 2014-12-16 18:58

大神们能修改成提取三个数据的代码吗?或者命令行提示单元格位置;获取数据的啊
作者: 522235677    时间: 2014-12-16 19:54

  1. @echo off & setlocal enabledelayedexpansion
  2. if exist new.csv del new.csv
  3. set data=D37,E39,D38
  4. for %%a in (%data%) do (
  5. echo Process %%a
  6. set /a d+=1
  7. for %%b in (A B C D E F G H I J K L M) do (
  8. set str=%%a
  9. set /a n+=1
  10. if "!str:~,1!"=="%%b" call :take !n! !str:~1,3! !d!
  11. )
  12. set n=
  13. )
  14. (for /f "delims=: tokens=2" %%a in ('findstr /n . new.csv^|findstr "1: 4: 7:"') do set /p=%%a,<nul)>$$.csv
  15. echo.>>$$.csv
  16. (for /f "delims=: tokens=2" %%a in ('findstr /n . new.csv^|findstr "2: 5: 8:"') do set /p=%%a,<nul)>>$$.csv
  17. echo.>>$$.csv
  18. (for /f "delims=: tokens=2" %%a in ('findstr /n . new.csv^|findstr "3: 6: 9:"') do set /p=%%a,<nul)>>$$.csv
  19. move /y $$.csv new.csv >nul
  20. start "" new.csv
  21. exit
  22. :take
  23. set /a h=%2-1
  24. for /f "delims=" %%a in ('dir /b *.csv') do (
  25.         for /f "skip=%h% delims=" %%b in ('type "%%a"') do (
  26.                 set str=%%b
  27.                 set str=!str:,=,$!
  28.                 for /f "delims=, tokens=%1" %%c in ("!str!") do (
  29.                         if "!a!"=="" (set str=%%c&>>new.csv echo !str:$=!)
  30. set a=1
  31.                 )
  32. )
  33.         set a=
  34. )
  35. goto :eof
复制代码
这代码我也是醉了,效率不高,不然得下功夫
作者: haichuan5121    时间: 2014-12-16 19:59

本帖最后由 haichuan5121 于 2014-12-16 20:14 编辑

回复 25# 522235677


    99.8        99.8        455        200        200
99.8        99.9        455        200        200
99.8        455        455        200       
输出格式不对哦 ,, 另是 取D37.D38.D39的数据??   要改其他单元格的怎么改哦
作者: haichuan5121    时间: 2014-12-17 08:52

本帖最后由 haichuan5121 于 2014-12-17 08:59 编辑

能不能跟这个FTP下载代码合成一个啊? 下载完成后,执行大神的提取命令生成个新的表!
纯小白只能看别人的稍作修改,这个下载代码我还想只下载设定文件生成时间内的文件呢,这个时间段可以locle输入设定的!
比如只下载一周内新生成的文件,或者更高级点,提示命令行带起止日期设定的,
@echo off
rem 指定FTP用户名
set ftpUser=sputter
rem 指定FTP密码
set ftpPass=sputter
rem 指定FTP服务器地址
set ftpIP=10.30.1.4
rem 指定待下载的文件位于FTP服务器的哪个目录
set ftpFolder=/11/
set LocalFolder=F:\2  
set ftpFile=%2%/2.csv
>"%ftpFile%" (   
echo,%ftpUser%   
echo,%ftpPass%   
echo cd "%ftpFolder%"  
echo lcd "%LocalFolder%"  
echo bin   
echo mget *0.csv
start ftp -v -i -s:"%ftpFile%" %ftpIP%   
echo 任务完成...&pause>nul
)
作者: yiwuyun    时间: 2014-12-18 15:22

把n个1列的文件合并为一个n列的文件:output.txt
file1.txt  file2.txt file3.txt file4.txt .........
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=2
  4. set str=
  5. type nul>output.txt
  6. for /l %%a in (1,1,!n!) do (
  7.   set /a n1=0
  8.   for /f %%b in ('type file%%a.txt') do (
  9.     set /a n1+=1
  10.     for /l %%c in (!n1!,1,!n1!) do (
  11.        set file%%a.row%%c=%%b
  12.     )
  13.   )
  14. )
  15. for /l %%a in (1,1,!n1!) do (
  16.   for /l %%b in (1,1,!n!) do (
  17.     set "str=!str!!file%%b.row%%a!   "
  18.   )
  19.   echo !str!>>output.txt
  20.   set str=
  21. )
复制代码

作者: yiwuyun    时间: 2014-12-18 18:52

修改了下,不足的用0来补。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=3
  4. set /a m=0
  5. set str=
  6. type nul>output.txt
  7. for /l %%a in (1,1,!n!) do (
  8.   set /a n1=0
  9.   for /f %%b in ('type file%%a.txt') do (
  10.     set /a n1+=1
  11.     for /l %%c in (!n1!,1,!n1!) do (
  12.        set file%%a.row%%c=%%b
  13.     )
  14.   )
  15.   if !n1! gtr !m! (set /a m=!n1!)
  16. )
  17. for /l %%a in (1,1,!m!) do (
  18.   for /l %%b in (1,1,!n!) do (
  19.     if "!file%%b.row%%a!"=="" (set /a file%%b.row%%a=0)
  20.     set "str=!str!!file%%b.row%%a!   "
  21.   )
  22.   echo !str!>>output.txt
  23.   set str=
  24. )
复制代码

作者: haichuan5121    时间: 2014-12-19 02:57

回复 25# 522235677


    大神  有时间给把格式改成正确的吧。数据能刷了 就是格式没有按列排列
作者: yiwuyun    时间: 2014-12-19 10:14

  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
复制代码

作者: haichuan5121    时间: 2014-12-19 21:59

回复 31# yiwuyun


    感谢大神指导 我这执行完全啊没反应。
作者: haichuan5121    时间: 2014-12-19 22:02

回复 31# yiwuyun


    能不能把19楼的给修改下啊,19楼的完全符合我的设想,就是最后生成表格格式有点错误‘
作者: yiwuyun    时间: 2014-12-20 09:09

  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. )
复制代码
试试。
作者: terse    时间: 2014-12-20 09:40

给你两参考 结果显示符合不 可自己修改下
  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)
复制代码

作者: haichuan5121    时间: 2014-12-20 21:11

回复 34# yiwuyun


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

  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. )
复制代码

作者: yiwuyun    时间: 2014-12-21 15:17

  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. )
复制代码
逗号分隔
作者: apang    时间: 2014-12-21 16:41

也来一个:
  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(","))
复制代码

作者: apang    时间: 2014-12-21 17:03

再来一下:
  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
复制代码

作者: yiwuyun    时间: 2014-12-21 18:03

  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. )
复制代码
这个稍稍通用一点
作者: haichuan5121    时间: 2014-12-21 21:03

回复 38# yiwuyun


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

回复 40# apang


    运行没反应啊  我小白 也看不懂
作者: haichuan5121    时间: 2014-12-22 00:01

回复 39# apang


    你这个数据少能刷;我这个文件有200-500个文件 刷一个要50分钟。。。。。
作者: apang    时间: 2014-12-22 15:48

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

回复 44# haichuan5121
你用40楼的代码,很快的,几百个文件也不会超过10秒吧。
我是写着玩的,哪晓得你要那么多文件。根本就不考虑效率。
你把40楼的代码的文件名改成vbs结尾,不要用bat结尾。主要是你没把用途写清楚,一直都在变。别人当然就不考虑那么多了。
作者: haichuan5121    时间: 2014-12-25 11:30

回复 45# apang


    你的40楼是正确的,问题解决了,一直以为是BAT代码呢 不知道是VBS的  改个后缀就能刷了 。。
作者: haichuan5121    时间: 2014-12-25 17:14

回复 45# apang


    Sorry  大哥对不住啊! 我一直以为你写得代码是BAT格式的呢,原来是VBS的。。。可以了
作者: haichuan5121    时间: 2015-2-2 14:42

Apang 大神 在不,帮忙看下 我的VB这个代码用的好好的,最近也没改啥咋用不了了啊! 提示
作者: apang    时间: 2015-2-2 17:49

回复 49# haichuan5121


    代码没有做容错处理,如果输入的行数或列数大于csv文件本身的行数或列数,就会报“下标越界”

解决办法:在vbs代码开头插入一行:
  1. On Error Resume Next
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2