2016-10-27 48 views
-2

我想搜索指定的目錄並找到與文件掩碼匹配的文件:Teal * csv,然後將其分配給變量(與沒有文件擴展名),並在Perl腳本的參數中引用這些變量。查找文件名,分配給變量並在windows批處理文件中運行帶變量的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個參數:要拆分第一檔,第二個數字,每個文件和第3名的行沒有文件擴展名

+0

是腳本的最後一行'\\ DBserver \ ...'部分嗎?你的意思是'%FILEFULLNAME%'而不是'%FILEFULLNAME',而'FILEMASK'也一樣? – aschipfl

回答

0

要引用一個批次變量的值,你需要使用%varname%,因此

... %FILEFULLNAME% 300000 %FILEMASK% 

應該治好你的(未說明的)問題,因爲變量是正確建立的。

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" 
) 
+0

謝謝。我正在努力的最重要的事情是如何找到文件。文件名稱每天增加..所以*(Teal * .csv)所在的位置是當前日期或文件的日期。我正試圖分解這個文件,然後讓我的FTP客戶端把它拉到我的網站。如何獲得批處理腳本以查找該目錄以查找像Teal_20161027.csv這樣的文件,然後將該腳本拆分爲 – kadagreatish

相關問題