[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理For /L 循环参数不能正常传递,希望大家给与指导

各位大佬,我下面的程序中出现一个问题:
%%i可以在第一个expt_%%i中正确取值,export_%%.csv可以顺利的转化为expt_2015.csv 和expt_2016.csv。
但是,在第二部分(即:skip之后部分),expt_%%i.csv就不能正确转化,expt_%%i.csv的实际输出却为expt_%i.csv,并非非期望的expt_2015.csv和expt_2016.csv。

但是%%i的确是在For /L的大循环内部,非常奇怪的是%%i在第二部分不能正常取值,这是为什么呢?有没有解决办法。感谢大家了
  1. setlocal enabledelayedexpansion
  2. @echo off
  3. chcp 65001>null
  4. ::-------------s1: export data-------------------------------------------
  5. for /L %%i in (2015,1,2016) do (
  6.   copy %%i12_export_cum.csv temp.csv
  7. :: writing the headline
  8.   for /f %%e in (temp.csv) do (
  9.    echo %%e >expt_%%i.csv
  10.    goto skip)
  11.    
  12.    :skip
  13. :: writting the data with com formatted as 8 digit   
  14.     (for /f "skip=1 tokens=1,2* delims=," %%a in (temp.csv) do (
  15.        set str=000%%~b
  16.        set F4=!str:~-8!
  17.        echo %%a,!F4!,%%c
  18.        ))>>expt_%%i.csv
  19.                                   )
复制代码

回复 1# delab-1


我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

goto会一去不复返,还有不要在for里定义标签(包括那个可以当注释用的双冒号标签)

TOP

回复 1# delab-1

试试订正后的代码,如下
  1. @echo off &setlocal enabledelayedexpansion
  2. chcp 65001>null
  3. for /L %%i in (2015,1,2016) do (
  4. copy "%%i12_export_cum.csv" temp.csv
  5. REM writing the headline
  6. (for /f %%e in (temp.csv) do echo %%e)>"expt_%%i.csv"
  7. REM writting the data with com formatted as 8 digit
  8. (for /f "skip=1 tokens=1,2* delims=," %%a in (temp.csv) do (
  9. set str=000%%~b
  10. set F4=!str:~-8!
  11. echo %%a,!F4!,%%c
  12. ))>>"expt_%%i.csv"
  13. )
复制代码

TOP

回复 4# aloha20200628


    感谢感谢!我当时写入skip的原因,是想让第一行的变量名称写入到新调整后的数据文本第一行。所以,循环到第一行后就跳出。
现在您的程序,是把所有的都显示进入了,不知可否在改进一下?

后来我采用set /p headline=<temp.csv,把第一行提取出来的。

TOP

本帖最后由 aloha20200628 于 2024-10-12 15:20 编辑

回复 5# delab-1
  1. @echo off &setlocal enabledelayedexpansion
  2. chcp 65001>null
  3. for /L %%i in (2015,1,2016) do (
  4.    copy "%%i12_export_cum.csv" temp.csv
  5.    ( REM writing the headline
  6.      set/p headline=<"temp.csv" &echo,!headline!
  7.      REM writting the data with com formatted as 8 digit
  8.      for /f "skip=1 tokens=1,2* delims=," %%a in (temp.csv) do (
  9.          set str=000%%~b
  10.          set F4=!str:~-8!
  11.          echo,%%a,!F4!,%%c
  12.    ))>"expt_%%i.csv"
  13. )
复制代码

TOP

  1. @echo off
  2. chcp 65001 >nul
  3. cd /d "%~dp0"
  4. for /l %%l in (2015,1,2016) do (
  5. (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^< "%%l12_export_cum.csv"') do (
  6. if %%a equ 1 (
  7. echo %%b
  8. ) else (
  9. (for /f "tokens=1-2* delims=," %%c in ("%%b") do (
  10. set str1=%%c
  11. set str2=%%d
  12. set str3=%%e
  13. setlocal enabledelayedexpansion
  14. echo !str1!,!str2:~-8!,!str3!
  15. endlocal
  16. )) || echo=
  17. )
  18. )) > "expt_%%l.csv"
  19. )
  20. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 7# 77七


   忘记补0了..
bat小白,请多指教!谢谢!

TOP

返回列表