2014-07-05 68 views
1

我正在嘗試創建一個批處理腳本來處理超過50個文本文件。有與文本文件匹配的文件名的PDF文件。我試圖從文本文件中抓取第12行,並將其相應的PDF文件重命名爲整個第12行的內容。到目前爲止,我已經能夠通過引用特定文件來做到這一點:從多個文本文件中抓取第n行以重命名匹配的pdf文件

FOR/F「tokens = 1 * delims =:」%% A in('findstr/n。*「File1.txt」 「)DO( IF 「%% A」 當量 「12」 仁 「File1.pdf」 「%% B.pdf」 )

我無法服用該行並具有它通過多個解析文件。這些文件也位於具有空格的目錄路徑中。任何幫助,將不勝感激!

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir\t w o" 
FOR %%a IN ("%sourcedir%\*.txt") DO IF EXIST "%%~dpna.pdf" (
SET unchanged=Y 
FOR /f "usebackqskip=11delims=" %%b IN ("%%a") DO IF DEFINED unchanged (
    ECHO(REN "%%~dpna.pdf" "%%b.pdf" 
    SET "unchanged=" 
) 
) 
GOTO :EOF 

所需的REN命令僅僅是用於測試目的的ECHO驗證命令是否正確後,將ECHO(REN更改爲REN以實際重命名文件。

您需要更改sourcedir的設置以適合您的情況。

+0

謝謝!這做了一些小調整的伎倆! – shadowofjazz

1
@echo off 
pushd "your folder with spaces in name" 
for /f "eol=: tokens=1,3 delims=:" %%A in (
    'findstr /n "^" *.txt ^|findstr "^[^:]*:12:"' 
) do if exist "%%~nA.pdf" ren "%%~nA.pdf" "%%B" 
popd 

第一個FINDSTR列出了所有.TXT文件的內容。每行輸出格式爲:

fileName:lineNumber:content 

第二個FINDSTR只保留每個文件的第12行。

FOR/F解析結果,提取第一個冒號前面的文本文件名和第二個冒號後面的內容(新文件名)。冒號在文件名中是無效的,所以我假定內容從來沒有冒號。

最後,DO部分驗證PDF是否存在,然後重命名它。

+0

在這種情況下,'findstr「^ [^:] *:12:」'只能是'findstr「:12:」'因爲文件名或文件重命名文件都不能包含': ' – foxidrive

+0

@foxidrive - 我不認爲這是一個安全的假設。我們不知道1-11線是什麼樣子,也不知道13號線和以上。但感謝您修理管道。 – dbenham

+0

不用擔心。我現在看到你用其他包含':12:'的行保護你的東西 – foxidrive