【问题标题】:Find file name, assign to variable and run perl script with variable in windows batch file查找文件名,分配给变量并在 Windows 批处理文件中使用变量运行 perl 脚本
【发布时间】:2017-03-10 17:38:41
【问题描述】:

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

【问题讨论】:

  • 最后一行\\DBserver\... 是脚本的一部分吗?你的意思是%FILEFULLNAME% 而不是%FILEFULLNAME,和FILEMASK 一样吗?

标签: windows perl batch-file variables


【解决方案1】:

要引用批处理变量的值,您需要使用%varname%,因此

... %FILEFULLNAME% 300000 %FILEMASK%

应该可以解决您的(未说明的)问题,前提是变量已正确建立。

【讨论】:

    【解决方案2】:

    正如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"
    )
    

    【讨论】:

    • 谢谢。我正在努力解决的最大问题是如何找到文件。文件名每天递增。所以 * (Teal*.csv) 所在的位置是当前日期或文件的日期。我试图分解这个文件,然后让我的 FTP 客户端将它拉到我的网站。如何让批处理脚本在该目录中查找像 Teal_20161027.csv 这样的文件,然后拆分 perl 脚本
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多