标题: [文本处理] 批处理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在第二部分不能正常取值,这是为什么呢?有没有解决办法。感谢大家了- setlocal enabledelayedexpansion
- @echo off
- chcp 65001>null
- ::-------------s1: export data-------------------------------------------
- for /L %%i in (2015,1,2016) do (
-
- copy %%i12_export_cum.csv temp.csv
- :: writing the headline
- for /f %%e in (temp.csv) do (
- echo %%e >expt_%%i.csv
- goto skip)
-
- :skip
- :: writting the data with com formatted as 8 digit
- (for /f "skip=1 tokens=1,2* delims=," %%a in (temp.csv) do (
- set str=000%%~b
- set F4=!str:~-8!
- echo %%a,!F4!,%%c
- ))>>expt_%%i.csv
-
- )
复制代码
作者: 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
试试订正后的代码,如下- @echo off &setlocal enabledelayedexpansion
- chcp 65001>null
- for /L %%i in (2015,1,2016) do (
- copy "%%i12_export_cum.csv" temp.csv
- REM writing the headline
- (for /f %%e in (temp.csv) do echo %%e)>"expt_%%i.csv"
- REM writting the data with com formatted as 8 digit
- (for /f "skip=1 tokens=1,2* delims=," %%a in (temp.csv) do (
- set str=000%%~b
- set F4=!str:~-8!
- echo %%a,!F4!,%%c
- ))>>"expt_%%i.csv"
- )
复制代码
作者: 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 - @echo off &setlocal enabledelayedexpansion
- chcp 65001>null
- for /L %%i in (2015,1,2016) do (
- copy "%%i12_export_cum.csv" temp.csv
- ( REM writing the headline
- set/p headline=<"temp.csv" &echo,!headline!
- REM writting the data with com formatted as 8 digit
- for /f "skip=1 tokens=1,2* delims=," %%a in (temp.csv) do (
- set str=000%%~b
- set F4=!str:~-8!
- echo,%%a,!F4!,%%c
- ))>"expt_%%i.csv"
- )
复制代码
作者: 77七 时间: 2024-10-9 20:31
- @echo off
- chcp 65001 >nul
- cd /d "%~dp0"
- for /l %%l in (2015,1,2016) do (
- (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^< "%%l12_export_cum.csv"') do (
- if %%a equ 1 (
- echo %%b
- ) else (
- (for /f "tokens=1-2* delims=," %%c in ("%%b") do (
- set str1=%%c
- set str2=%%d
- set str3=%%e
- setlocal enabledelayedexpansion
- echo !str1!,!str2:~-8!,!str3!
- endlocal
- )) || echo=
- )
- )) > "expt_%%l.csv"
- )
- pause
复制代码
作者: 77七 时间: 2024-10-9 20:35
回复 7# 77七
忘记补0了..
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |