我需要重写部分原始文件

时间:2018-01-29 00:46:42

标签: batch-file

我有一个.csv文件。在每个第3和第4列(第1行除外)中,都有DDMMYY格式的日期。我需要将它重写为DD.MM.20YY。到目前为止我得到了这个:

SETLOCAL EnableDelayedExpansion
@echo off
for /f "usebackq delims=; skip=1 tokens=3,4" %%a  in ("original.csv") DO (
echo %%a %%b
set datum=%%a
echo !datum:~0,2!
echo !datum:~2,2!
echo !datum:~4,2!
set %%a=%datum:~0,2%.%datum:~2,2%.20%datum:~4,2%
echo %%a
)

我觉得使用set %%a并不起作用。提前谢谢!

2 个答案:

答案 0 :(得分:0)

highestScore = 0 # in my previous code, I use max() instead
with open("mathsEasy.txt") as mathsEasyFile: # open the file
    for line in mathsEasyFile: # for each line in the file,
        if len(line.strip()) == 0: # if the current line is empty,
            continue # ignore it and keep going to the next line
        _,score = line.split(' : ') # split the line into its components
        if int(score) > highestScore: # if this score is better,
            highestScore = int(score) # replace the best score
print("The highest score is %d" % highestScore)

您需要更改@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET "sourcedir=U:\sourcedir" SET "filename1=%sourcedir%\q48492955.csv" SET "destdir=U:\destdir" SET "outfile=%destdir%\outfile.txt" for /f "usebackq delims=" %%a in ("%filename1%") DO >"%outfile%" ECHO %%a&GOTO :hdr :hdr ( for /f "usebackq skip=1 tokens=1-4* delims=;" %%a in ("%filename1%") DO ( REM dates are in col3,4 = %%c,%%d set "datum1=%%c" set "datum2=%%d" ECHO %%a;%%b;!datum1:~0,2!.!datum1:~2,2!.20!datum1:~4,2!;!datum2:~0,2!.!datum2:~2,2!.20!datum2:~4,2!;%%e ) )>>"%outfile%" GOTO :EOF sourcedir的设置以适合您的具体情况。

我使用了一个名为destdir的文件,其中包含一些虚拟数据供我测试。

生成定义为%outfile%

的文件

前几行只是建立适合我系统的文件位置。

第一个q48492955.csv读取标题行并将其输出到输出文件,然后立即跳转到for,以便只处理一行。

请注意,代码的其余部分包含在:hdr中。这会收集块中的任何输出(...)>>"%outfile%",并将其重定向到追加echo)到输出文件。

第二个>>循环将前4个令牌和剩余的行分配给for .. %%a。没有工具可以批量分配第一个标记之前的部分,因此必须单独分配每个标记。

所以 - %%e所需的两个标记的值所需的两个日期变量,然后set结果,反刍前2个标记和最后一个,并用修改后的第三个和第四个替换串。请注意,由于echo生效,delayedexpansion会对!varexpression!当前值起作用,而不是{{1>}给出的初始值{1}} - 许多关于此的SO文章(使用var的搜索功能)

答案 1 :(得分:0)

如果我理解你的任务正确,这样的事情可能与你的要求相似。

@Echo Off
Set /P "header="<"original.csv">"modified.csv"
SetLocal EnableDelayedExpansion
(
    For /F "UseBackQ Skip=1 Tokens=1-4* Delims=;" %%A  In ("original.csv") Do (
        Set "cols=%%C;%%D"
        Set "cols=!cols:~,2!.!cols:~2,2!.20!cols:~4,5!.!cols:~9,2.20!cols:~11,2"
        Echo %%A;%%B;!cols!;%%E
    )
)>>"modified.csv"
Rem Del "original.csv"
Rem Ren "modified.csv" "original.csv"

如果Rem包含所需数据并且您希望将其重命名为覆盖原始数据,则modified.csv确认最后一行。