2017-01-30 433 views
2

我正試圖讀取目錄並從該目錄獲取文件名。 然後我想將文件名保存爲一個變量並將該文件名回顯出來。批處理文件 - 從目錄獲取文件名並保存爲變量

這裏是我使用的代碼:

for /F %%a in ('dir C:\Users\username\Documents\Training\Pentaho\Outputs\BatchFileOutput\ *.csv') do set FileName=%%a 
echo %FileName% 

我收到時命令如下提示運行: 「找不到文件 目錄」

有誰知道如何解決這個或者我錯了?

感謝

+0

我認爲在你的代碼中唯一的問題是'* .csv'前面的_space_ ... – aschipfl

回答

1
做同樣的

更安全的方式:

@echo off 
setlocal 
set "yourDir=C:\Users\username\Documents\Training\Pentaho\Outputs\BatchFileOutput\" 
set "yourExt=*.csv" 
pushd %yourDir% 
for %%a in (*.%yourExt%) do echo %%a 
popd 
endlocal 

同時設置:您的目錄和您正在搜索的擴展,更改目錄到一個預先設置好的可能包括/d裏沃變化然後對與您的擴展名匹配的所有文件運行循環並將其回顯出來。爲了節省只有最後一個你可以使用:

...do set fileName=%%a 
echo %FileName% 

或者用他們所有的循環中,你可以使用:

@echo off 
Setlocal EnableDelayedExpansion 
REM Other things done here 

do (
REM Do stuff with %%a here 
Set filename=%%a 
echo !filename! 
echo !filename:~0,6! 
echo !filename:a=b! 
) 

如果你只是想附和他們,你可以去爲echo %%a。如果您想按照註釋中所述執行字符串替換或子字符串等其他操作,則需要如上所示的DelayedExpansion。對於SO也有很多問題。

請注意,您可以獲得文件路徑的不同「部分」。看看this answer我總是看看。或者,查看for命令的文檔,在命令行中鍵入for /?

+0

謝謝,這個作品! :) 難道我不只是使用以下方法來獲取文件名的一部分(這似乎並沒有被工作,雖然?) SET結果= %%一:〜0.6% ECHO%結果% – Karen

+0

都能跟得上。原因是這些for循環參數變量不被認爲是以這種方式使用。你可以將它保存爲變量,然後使用'DelayedExpansion'(< - 重要的東西;))做你想做的事情。請注意,你總是必須知道你想得到的字符串的哪一部分。使用分隔符和'for/f'或上面顯示的方式來獲取文件名通常是更安全的方式。 – geisterfurz007

+0

我已經找到了一種方法來使用下面的代碼: for %% a in(*。%yourExt%)do set filename = %% a echo%filename% 但是,它只在一個文件名目錄中有三個文件名(我是新手) 我查看了delayedexpansion並且我不是100%確定它在這種情況下可以如何提供幫助? – Karen

相關問題