2012-02-19 95 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

相关问题