Windows 对特定类型的文件运行命令

Windows 对特定类型的文件运行命令,windows,batch-file,cmd,file-type,Windows,Batch File,Cmd,File Type,我目前正试图在某些类型的文件上运行一个程序。下面是我执行以下操作的批处理脚本: 清除名为“Projections.txt”的文本文件 循环浏览当前目录中的所有文件 如果找到文件类型.prj,请运行程序gdalsrsinfo.exe并将其写入文本文件 代码如下: break>projections.txt for %%a in (*) do ( if exist *.prj ( echo ".prj file found" echo %%a >> projections.txt

我目前正试图在某些类型的文件上运行一个程序。下面是我执行以下操作的批处理脚本:

  • 清除名为“Projections.txt”的文本文件

  • 循环浏览当前目录中的所有文件

  • 如果找到文件类型.prj,请运行程序gdalsrsinfo.exe并将其写入文本文件

  • 代码如下:

    break>projections.txt
    for %%a in (*) do (
    if exist *.prj (
    echo ".prj file found"
    echo %%a >> projections.txt
    "C:\Program Files\GDAL\gdalsrsinfo.exe" -e proj4 %%a >> projections.txt
    )
    )
    
    我似乎不能只在.prj文件上运行这个程序,它通过“gdalsrsinfo.exe”将目录中的每个文件都放进去

    我的问题是如何在.prj文件上运行“gdalsrsinfo.exe”


    感谢

    修复您当前的代码

    @echo off
    break>projections.txt
    for %%a in (*) do (
       if "%%~xa" == ".prj" (
           echo ".prj file found"
           echo %%a >> projections.txt
           "C:\Program Files\GDAL\gdalsrsinfo.exe" -e proj4 %%a >>projections.txt
       )
    )
    
    但是,如果它只是您感兴趣的
    .prj
    文件,而不是任何其他文件,则您可以在for循环中明确筛选它,并消除
    如果存在的部分

    @echo off
    break>projections.txt
    for %%a in (*.prj) do (
           echo ".prj file found"
           echo %%a >> projections.txt
           "C:\Program Files\GDAL\gdalsrsinfo.exe" -e proj4 %%a >>projections.txt
       )
    

    修复当前代码

    @echo off
    break>projections.txt
    for %%a in (*) do (
       if "%%~xa" == ".prj" (
           echo ".prj file found"
           echo %%a >> projections.txt
           "C:\Program Files\GDAL\gdalsrsinfo.exe" -e proj4 %%a >>projections.txt
       )
    )
    
    但是,如果它只是您感兴趣的
    .prj
    文件,而不是任何其他文件,则您可以在for循环中明确筛选它,并消除
    如果存在的部分

    @echo off
    break>projections.txt
    for %%a in (*.prj) do (
           echo ".prj file found"
           echo %%a >> projections.txt
           "C:\Program Files\GDAL\gdalsrsinfo.exe" -e proj4 %%a >>projections.txt
       )
    

    以下方法将更快、更有效

    @(For %%G In ("*.prj")Do @(Echo ".prj file found">CON
            Echo %%G
            "%ProgramFiles%\GDAL\gdalsrsinfo.exe" -e proj4 %%G 
       ))>"projections.txt"
    
    它更快、更高效,因为它不创建输出文件,然后为找到的每个
    .prj
    文件打开、写入和关闭它两次

    以更简化的格式:

    @Echo关闭
    (
    对于%%G英寸(“*.prj”)请执行以下操作(
    找到Echo“.prj文件”>CON
    回声%%G
    %ProgramFiles%\GDAL\gdalsrsinfo.exe“-e proj4%%G
    )
    )>“projections.txt”
    
    以下方法将更快、更有效

    @(For %%G In ("*.prj")Do @(Echo ".prj file found">CON
            Echo %%G
            "%ProgramFiles%\GDAL\gdalsrsinfo.exe" -e proj4 %%G 
       ))>"projections.txt"
    
    它更快、更高效,因为它不创建输出文件,然后为找到的每个
    .prj
    文件打开、写入和关闭它两次

    以更简化的格式:

    @Echo关闭
    (
    对于%%G英寸(“*.prj”)请执行以下操作(
    找到Echo“.prj文件”>CON
    回声%%G
    %ProgramFiles%\GDAL\gdalsrsinfo.exe“-e proj4%%G
    )
    )>“projections.txt”
    
    对于(*.prj)do中的%%a(
    ),您是否在不必要且错误使用的
    (如果存在)行上读取了错误?
    对于(*.prj)do中的%%a(
    您是否阅读了不必要且错误使用的
    if exist行上的错误?
    ?我想作者已经回答了这个问题-虽然您的答案更高效、更优雅,但初学者更难理解。@GarthCooper,我添加了两个换行符和显式的
    @Echo Off
    ,使它看起来更简单ginners.我想作者已经回答了这个问题-虽然你的答案更有效、更优雅,但初学者更难理解。@GarthCooper,我添加了两个换行符和显式的
    @Echo Off
    ,让初学者看起来更简单。