代码之家  ›  专栏  ›  技术社区  ›  NonProgrammer

查找文件,然后将其名称用作变量命令提示

  •  0
  • NonProgrammer  · 技术社区  · 7 年前

    如何查找文件并将文件名分配给变量?

    例子: 假设我正在下面的位置查找文件。文件名不断变化,唯一能找到正确文件的方法是在文件名字符串中查找今天的日期:

    X:\VoyagerBackups\PickupLocation\tsiuiolou_live_Full_PCV048DB42_201812140000.Lts.bak
    

    这是到目前为止我在.bat文件中的内容。如果硬代码文件名:

    echo on
    Rem Determine date
    Set mm1=%date:~4,2%
    Set dd1=%date:~7,2%
    Set yyyy1=%date:~10,4%
    
    Set rundate1=%yyyy1%%mm1%%dd1%
    
    Set executefile1=tsiuiolou_live_Full_PCV048DB42_%rundate1%0000.Lts.bak
    set downloadfile=tsiuiolou_live_Full_PCV048DB42_%rundate1%0000.bak
    
    extractor64.exe -F %executefile1% -E %downloadfile%
    
    move %executefile1% X:\VoyagerBackups\BackupFiles
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   LotPings    7 年前

    不要使用依赖于%date%变量的区域设置/用户设置。

    使用任一 wmic 或者PowerShell,它们都有更稳定的方法。

    :: Q:\Test\2018\12\14\SO_53787816.cmd
    @Echo off
    
    for /f "usebackq" %%A in (`
      powershell -NoP -C "(Get-Date).ToString('yyyyMMdd')"
    `) Do Set "Today1=%%A"
    Echo PowerShell today:%Today1%
    
    for /f "tokens=1-3 delims=.+-" %%A in (
      'wmic os get LocalDateTime^|findstr ^^[0-9]'
    ) do Set "Today2=%%A"
    Set "Today2=%Today2:~0,8%"
    Echo       wmic today:%Today2%
    
    Set "Base=X:\VoyagerBackups\PickupLocation\"
    PushD "%Base%" || (Echo can't find base:%Base%&Pause&Goto :Eof)
    
    For /f "delims=" %%A in ('Dir /B "*%Today1%*" ') Do (
        Echo found file:%%~fA
    )
    PopD