我正在尝试搜索指定的目录并找到与文件掩码匹配的文件:Teal * csv然后将其分配给变量(带和不带文件扩展名)并在Perl脚本的参数中引用这些变量
set FILEPATH=\\DBserver\files\outgoing\Temp\Teal*.csv
for /F "delims=" %%A in ("%FILEPATH%") do (
set "FILEFULLNAME=%%~nxA"
set "FILEMASK=%%~nA"
set "FILEEXT=%%~xA"
)
perl \\DBserver\scripts\splitfileFINAL.pl \\DBserver\files\outgoing\Temp\%FILEFULLNAME 300000 %FILEMASK
Perl脚本有3个参数:第一个要拆分的文件,第二个每个文件的行数和没有文件扩展名的第三个文件名
答案 0 :(得分:0)
要引用批处理变量的值,您需要使用%varname%
,因此
... %FILEFULLNAME% 300000 %FILEMASK%
应该治愈你的(未说明的)问题,因为变量是正确建立的。
答案 1 :(得分:0)
正如Magoo在他的回答中所说,当你想扩展它时,你需要在环境变量的两端放置%
。
但是如果你想迭代文件夹中的文件,那么你想要使用简单的FOR,而不是FOR / F.
另外,我根本不知道为什么你需要环境变量。您可以直接使用FOR变量。
最后,%% A将包含完整路径。无需在循环体中对文件路径进行硬编码。
@echo off
set "SCRIPT=\\DBserver\scripts\splitfileFINAL.pl"
set "FILEPATH=\\DBserver\files\outgoing\Temp\Teal*.csv"
for %%A in ("%FILEPATH%") do perl "%SCRIPT%" "%%F" 300000 "%%~nA"
如果您的perl脚本在同一文件夹中创建了其他csv文件,则FOR循环可能会拾取这些新文件。如果是这种情况,那么您需要切换到FOR / F并处理DIR命令,以便在开始任何处理之前缓冲完整的文件列表。现在,完整路径未列在%% A中,因此您需要将其包含在正文中。
@echo off
set "SCRIPT=\\DBserver\scripts\splitfileFINAL.pl"
set "FILEPATH=\\DBserver\files\outgoing\Temp\"
set "FILEMASK=Teal*.csv"
for /f "delims=" %%A in ('dir /b /a-d "%FILEPATH%%FILEMASK%") do (
perl "%SCRIPT%" "%FILEMASK%%%A" 300000 "%%~nA"
)