2011-07-12 34 views
2

我想在Windows批量編程中讀取文件的名稱。我嘗試通過使用不同的方法,但失敗請幫助。在Windows批量編程中讀取文件名

情景已在下面給出。

我在一個文件夾中有不同的文件,但文件名的長度與所有文件相同。 例如

1000342578_30062011.PDF 
1000342329_30062011.PDF 

我只想_之後和之前的變量.PDF(例如30062011)部分保存的部分。

下面只是嘗試,但我無法通過。

@echo off 
echo.Date : %date% 
echo.Year : %date:~10,4% 
dir /s /b C:\Users\zeeshando\Desktop\*.txt 
for %%x in (c:\temp\*.xls) do echo %%x 
lfnfor off 
for %%x in (*.*) do echo %%x > filelist.txt 
PAUSE 
for %i in (C:\Users\zeeshando\Desktop) do 
    echo %~ni 
PAUSE 

UPDATE

我當前的代碼,基於@Alex K.的回答是:

@setlocal enabledelayedexpansion 
for %%x in (C:\Hi\*.*) do (
    set fn=%%x 
    set fn=!fn:~22,8! 
    echo !fn! 
    call:handler 
) 
goto:eof 

:handler 
echo !fn! 
copy C:\Hi\*.* E:\!fn! 
goto:eof 


PAUSE 

但它不是複製文件。請檢查上面的代碼。

+0

你知道VBScript嗎?它的字符串操作庫很容易使用(http://www.w3schools.com/vbscript/vbscript_ref_functions.asp#string) – bobobobo

+0

如果你想更新你的問題,請**添加**新信息,**不要完全替換**整個帖子的內容。 –

回答

0

由於它們的長度固定,因此可以使用:~startpos,len語法;

set fn=1000342578_30062011.PDF 
set fn=%fn:~11,8% 
echo %fn% 

>30062011 

在for循環中;

setlocal enabledelayedexpansion 
for %%x in (*.*) do (
    set fn=%%x 
    set fn=!fn:~11,8! 
    call:handler 
) 
goto:eof 

:handler 
    echo !fn! 
goto:eof 
+0

我知道如何分割字符串,但不知道如何從文件名採取字符串,然後拆分? – Mareena

+0

如果你的意思是在我已經更新以上 –

+0

這對我有用,但在某種程度上,是否有任何方法將值設置爲全局,因爲我需要echo!fn! for()之後的值? – Mareena

2

你可以在for循環中使用_和來做到這一點。作爲分隔符,就像這樣:

FOR /F "tokens=2 delims=_." %%i IN ('DIR /b C:\Users\zeeshando\Desktop\*_*.*') DO ECHO %%i 
+0

不工作...沒有顯示輸出... – Mareena

+0

我目前使用下面的代碼,但它的輸出沒有提到的dirstory中有多個文件。 @echo off FOR/F「標記= 2分隔= _」。 %%我( 'DIR/B d:\ BPM \ PDF \ PDF * _ *')DO \t ECHO %%我 PAUSE – Mareena

+0

你跟一個批處理文件,或只是在命令行測試?如果您直接從命令行運行它,請使用%i而不是%% i。 – Dave

1
@ECHO OFF 
SET "destpath=destinationPath" 
FOR %%f IN (sourcePath\*.*) DO CALL :process "%%f" 
GOTO :EOF 

:process 
SET srcfile=%1 
SET "name=%~n1" 
SET "name=%name:*_=%" 
COPY %srcfile% "%destpath%\%name%" 

SET "name=%~n1"線從完整路徑只是不帶擴展名中提取。

SET "name=%name:*_=%"行刪除_字符及其之前的值name,並將結果存回name

最終,在執行COPY命令之前,name只包含_和擴展名之間的原始文件名的那部分。