我有一个关于在Windows 7中编写命令提示符脚本(DOS)的问题。
我的任务: 我有一个原始数据文件目录(* .csv),其中第38行是保存日期和时间的地方。 示例文件单元格A38: 开课日期/时间:2014年6月20日13:26:16
但是,此日期格式为M / DD / YYYY,因为它是使用采样计算机保存的,其中计算机的日期设置如此。 我知道有一种方法可以编写一个可以在这些文件的目录上执行的脚本,这样就不会改变其他任何信息(文本或实际时间戳), 但日期格式改为英国风格的DD / MM / YYYY。
预期产品: 该文件以任何方式保持不变,但第38行读取 开课日期/时间:20/06/2014 13:26:16
我真的不想通过对800多个文件执行此操作,以及更多文件,所以任何帮助都将非常感谢帮助执行此格式更改 以脚本格式,可以在* .csv文件的整个目录上执行。
我还认为重要的是,整个文本以及实际日期和时间都在Excel中的一个单元格中(A38)(开始日期/时间:M / D / YYYY HH:MM:SS) 我想把时间保持在24小时。
任何指导/指示都会很棒。我对Windows中的命令行编程很新。也很高兴看到这样的脚本是否可用于Ubuntu环境,或python脚本,或任何真正可以自动完成将一行的一部分更改为接近1000次的繁琐任务,将更改后的目录切换回Windows电脑根本没什么大不了的。更简单(我确定可以使用cmd.exe)
干杯, 沃尔
答案 0 :(得分:0)
所以你的选择大致是:
的Python
Windows' cmd'脚本
将文件传输到* nix环境,如果您更熟悉,可以使用这些工具进行操作
如果使用Python,请查看:
os
模块,os.listdir()
,os.path
等。
正则表达式替换使用函数(re.sub
取代函数而不是字符串作为替代)
datetime.datetime.strptime
和datetime.datetime.strftime
答案 1 :(得分:0)
我没有示例文件,但sed
应该是......
sed /(.*?,){37}/ s/([0-9]{1,2})\/([0-9]{2})\/([0-9]{4})/\2\/\1\/\3/
你可以通过以下方式集体做到:
for file in /path/to/files/*.csv
do
sed -ri".bak" /(.*?,){37}/ s/([0-9]{1,2})\/([0-9]{2})\/([0-9]{4})/\2\/\1\/\3/ file
done
现在在GnuWin32的sed。
上测试# INFILE @ /test/a.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2/20/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,12/31/2014
# INFILE @ /test/b.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7/11/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5/18/1987
# Command line command
C:\>FOR %f IN (C:\test\*.csv) DO sed -ri".bak" "/(.*?,){37}/ s/([0-9]{1,2})\/([0-9]{2})\/([0-9]{4})/\2\/\1\/\3/" %f
# OUTFILE @ /test/a.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,20/2/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,31/12/2014
# OUTFILE @ /test/b.csv
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11/7/2014
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,18/5/1987