查找文件名,分配给变量并在Windows批处理文件中使用变量运行perl脚本

时间:2016-10-27 21:47:41

标签: windows perl batch-file variables

我正在尝试搜索指定的目录并找到与文件掩码匹配的文件: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个参数:第一个要拆分的文件,第二个每个文件的行数和没有文件扩展名的第三个文件名

2 个答案:

答案 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"
)