Board logo

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

作者: delab-1    时间: 2024-10-8 22:10     标题: 批处理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.                                   )
复制代码

作者: Batcher    时间: 2024-10-8 22:38

回复 1# delab-1



作者: Five66    时间: 2024-10-8 23:26

goto会一去不复返,还有不要在for里定义标签(包括那个可以当注释用的双冒号标签)
作者: aloha20200628    时间: 2024-10-9 11:12

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

作者: delab-1    时间: 2024-10-9 13:20

回复 4# aloha20200628


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

后来我采用set /p headline=<temp.csv,把第一行提取出来的。
作者: aloha20200628    时间: 2024-10-9 15:05

本帖最后由 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. )
复制代码

作者: 77七    时间: 2024-10-9 20:31

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

作者: 77七    时间: 2024-10-9 20:35

回复 7# 77七


   忘记补0了..




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