2012-02-19 97 views
0

有兩個文件名:0_1_en.pdf和GEN 0 GENERAL.html。如果變量%% H中的html文件符合規則「GEN 0 * .pdf」包含,則最後四行代碼是我的嘗試(不成功)。對不起我的英文,我不知道怎麼說更好,但我試着比較規則是否給出了有效的文件名。所以如果有文件名「GEN 0 GENERAL.html」,它應該顯示字符串GEN 0 GENERAL.html。如果這不符合規則,則不會打印字符串。所以如果我讀取一個文件名「GEN 3 SERVICES.html」,所以不會打印任何內容。如何比較批處理文件中的文件名

@echo off 
SETLOCAL EnableDelayedExpansion 
for /f "delims=" %%P in ('dir /b *.pdf') do (
SET "sPDFName=%%~nxP" 
echo "!sPDFName:~0,1!" 
IF "!sPDFName:~0,1!"=="1" (SET "sPDFName=!sPDFName:~0,1!") 
IF "!sPDFName:~0,1!"=="0" (SET "sPDFName=!sPDFName:~0,1!") 
SET tempStr="GEN !sPDFName!*.html" 
echo !tempStr! 
::echo "!sPDFName!" 
for /f "delims=" %%H in ('dir /b *.html') do (
CALL SET substring=%%H:~!tempStr!%% 
echo K:%substring% 
IF "%%substring%%"=="%%H" (echo %%H) ELSE (echo NOT FOUND) 
pause)) 

給出了結果: 「0」 「GEN 0的* .pdf」 K: NOT FOUND 按任意鍵繼續......

+0

你會得到什麼錯誤? – 2012-02-19 13:20:14

+0

「0」 「GEN 0 *。pdf「 K: NOT FOUND <下一行此處> 按任意鍵繼續....將替換爲行尾 – user1141649 2012-02-19 14:06:18

+0

使用雙引號i For '「dir/b * .pdf」'。「」delims =「'不是必需的 – 2012-02-19 14:16:32

回答

1

我相信你的代碼失敗的主要原因是CALL SET substring=%%H:~!tempStr!%%行沒有任何意義。我不確定你在那裏試圖做什麼,但我很確定它沒有給出你想要的結果。

嘗試1(不完全正確)
我相信我明白你的目標是什麼,我覺得你的代碼要複雜得多它需要。

我想你想測試每個pdf文件,看看是否存在一個「GEN n GENERAL.html」文件,其中'n'匹配pdf文件名中的第一個字符。

看看是否給你正在尋找的結果

@echo off 
setlocal enableDelayedExansion 
for %%F in (*.pdf) do (
    set "pdfFile=%%F" 
    set "htmlFile=GEN !pdfFile:~0,1! GENERAL.html" 
    if exist "!htmlFile!" (set result=FOUND) else (set result=NOT FOUND) 
    echo testing "!pdfFile!": "!htmlFile!" !result! 
) 

嘗試2(後OP評論)
我在你的CALL SET語句看了一遍,它好像你正試圖做一個子操作上FOR變量

  • 問題1:您無法執行子或搜索和替換對變量擴展
  • 問題2:!tempStr!不包含子字符串操作的正確語法

我仍然不完全理解您期望使用該CALL代碼的結果,所以我不知道如何解決該問題。

但是,您的評論有助於我理解您的總體目標是什麼:對於名稱= n中的第一個字符的pdf,您正在尋找「GEN n * .html」。

如果你需要做的就是打印出來的匹配的HTML文件,或者如果沒有發現打印錯誤消息,那麼這應該工作:

@echo off 
setlocal enableDelayedExansion 
for %%P in (*.pdf) do (
    set "pdfFile=%%P" 
    set htmlMask="GEN !pdfFile:~0,1!*.html" 
    echo(
    echo Testing "!pdfFile!": Looking for !htmlMask! 
    dir /b !htmlMask! 
) 

如果您需要做的事情,每個發現的html文件,那麼這應該工作:

@echo off 
setlocal enableDelayedExansion 
for %%P in (*.pdf) do (
    set "pdfFile=%%P" 
    set htmlMask="GEN !pdfFile:~0,1!*.html" 
    echo(
    echo Testing "!pdfFile!": Looking for !htmlMask! 
    set "found=" 
    for %%H in (!htmlMask!) do (
    set found=1 
    echo "%%H" 
    REM do whatever you need to do with the %%P pdf file and %%H html file 
) 
    if not defined found echo NOT FOUND 
) 

如果你只想處理與0或1開始的PDF文件,然後換1號FOR聲明如下:

for %%P in (0*.pdf 1*.pdf) do (
+0

我的代碼的基本結構是好的,我沒有提到有更多的帶有長文件名的html文件,它們是6,但是,可能會更多,如下所示,使用精確的文件名無效:s et「htmlFile = GEN!pdfFile:〜0,1! GENERAL.html「,因爲你只是不知道該文件是以」GENERAL.html「還是其他任何東西而結尾的。我寧願比較循環#2中的變量,如果找到該文件, 2可以退出/中斷並繼續循環#1。如果只有一個html文件,您的解決方案將會很好。感謝您的幫助 – user1141649 2012-02-19 15:28:03

+0

我從這裏嘗試了我的嘗試:ss64.com/nt/syntax-substring.html請參閱「高級用法:〜」......唯一的區別是我試圖在比較表達式的右側添加「GEN 0 * .html」。也許我做錯了,因爲我需要比較,而不是替換 – user1141649 2012-02-19 15:39:01

+0

第二個代碼(嘗試2)真的很聰明,我認爲這樣可以節省工作中的循環。 – user1141649 2012-02-19 17:33:16

相關問題