【发布时间】:2017-10-31 11:45:53
【问题描述】:
我对批处理文件比较陌生,这就是我想要做的:
-
我有一个包含多个 csv 文件的文件夹,名为:
Thu_Oct_26_11-12-07_BST_2017+testa.csv Thu_Oct_26_11-12-07_BST_2017+testb.csv文件中的文本以
|分隔,即Peg|Adoption|Indonesia|1980| Peg|Adoption|Indonesia|1981| -
我有一个批处理代码,将文件名放在 csv 文件中每一行的前面
::add filename for /f %%a in ('dir /b ^"C:\Temp\CSV\Countries\*.csv^"' ) do ( for /f "tokens=*" %%b in (%%a ) do echo %%a^|%%b >> "C:\Temp\CSV\Countries\import_temp\%%a") pause -
上面的方法是将整个名称添加到行的前面,但我只想将文件名的日期部分添加到行中。我尝试使用
:~0,10从%%a中选择一个子字符串,但这仍然会粘贴整个字符串::add filename for /f %%a in ('dir /b ^"C:\Temp\CSV\Countries\*.csv^"' ) do ( for /f "tokens=*" %%b in (%%a ) do echo %%a:~0,10^|%%b >> "C:\Temp\CSV\Countries\import_temp\%%a") pause我也尝试设置一个等于
%%a子字符串的新变量,但这会打印%c而不是文件名的第一部分::add filename for /f %%a in ('dir /b ^"C:\Temp\CSV\Countries\*.csv^"' ) do ( set c=%%a:~0,10 for /f "tokens=*" %%b in (%%a ) do echo %%c^|%%b >> "C:\Temp\CSV\Countries\import_temp\%%a") pause
有人能指出我做错了什么吗?
【问题讨论】:
-
您需要在 FOR 循环的主体内使用delayed environment variable expansion。字符串替换仅适用于 environment 变量,但不适用于 loop 变量。用
%%a引用的a是一个循环 变量。在命令提示符窗口set /?和for /?中运行并阅读这两个命令的完整输出帮助。顺便说一句:^不需要留给"。并且for %%a in ("C:\Temp\CSV\Countries\*.csv") do (也可以在这里使用,而无需在后台单独的命令进程中执行DIR。
标签: windows batch-file variables for-loop