如何通过Windows批处理脚本输出带扩展名的文件名?

时间:2017-11-08 16:20:48

标签: batch-file

我有以下.bat脚本:

FOR /f "skip=1" %%x IN ('wmic os get localdatetime') DO IF NOT DEFINED MyDate SET MyDate=%%x
SET today=%MyDate:~0,4%%MyDate:~4,2%%MyDate:~6,2%

SET fileext=".csv"

SET Username=some_user
SET Password=some_password
SET Domain=some_domain

SET LDAPport=3268

SET LDAPAttributeList=sAMAccountName
SET LDAPfilter="(&(objectClass=User)(objectCategory=Person))"

FOR /F "tokens=1,2 delims=|" %%G IN (files_DCs_map.txt) DO (
    csvde -f %%G%today%fileext -r %LDAPfilter% -l %LDAPAttributeList% -t %LDAPport% -s %%H -b %Username% %Domain% %Password% -u
)

此脚本使用csvde实用程序从Windows AD域控制器中提取数据并将其写入文件。文件名和域控制器IP存储在文件files_DCs_map.txt中。此文件中的示例行是:

some_DC|some_IP

该脚本有效,但输出的文件名不正确。我想要<some_DC><today>.csv形式的文件名。它目前以<some_DC><today>fileext的形式输出文件名。也就是说,它不能正确解释变量文件。例如,它输出文件名some_DC20171128fileext。我希望此文件名为some_DC20171128.csv。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

批处理中的常规变量需要用百分号括起来。您已将文件名指定为

%%G%today%fileext

%%G是循环变量。 %today%是日期,按预期工作。错过百分比的filext只是一个文字。你需要这样说:

%%G%today%%fileext%