我有一个.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
并不起作用。提前谢谢!
答案 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
确认最后一行。