【问题标题】:Locate multiple files with the same extension batch script找到具有相同扩展名批处理脚本的多个文件
【发布时间】:2017-02-15 05:19:41
【问题描述】:

我正在编写这个批处理脚本,但是当它开始查找是否存在具有文件扩展名的所有文件时,它会继续执行 else 即使文件存在。提前感谢您的帮助!

@echo off
if not exist C:\Users\%USERNAME%\Desktop\workBackup (
    ::creates new folder 'workBackup'
    mkdir C:\Users\%USERNAME%\Desktop\workBackup
)

set TIMESTAMP=%DATE:~4,2%%DATE:~7,2%%DATE:~10,4%

if not exist C:\Users\%USERNAME%\Desktop\workBackup\%TIMESTAMP% (
    ::creates new folder to put work into
    mkdir C:\Users\%USERNAME%\Desktop\workBackup\%TIMESTAMP%    
)

if not exist C:\Users\%USERNAME%\Desktop\workBackup\%TIMESTAMP%\logs (
    ::creates logs folder
    mkdir C:\Users\%USERNAME%\Desktop\workBackup\%TIMESTAMP%\logs
)

if exist C:\User\%USERNAME%\Documents\workspace\out\log\*.xlsx (
    ::moves all xlsx files to workBackup folder
    move "C:\User\%USERNAME%\Documents\workspace\out\log\"*.xlsx C:\Users\%USERNAME%\Desktop\workBackup\%TIMESTAMP%\
) else (
    ::exits if file no files are found
    echo "Files not found" 
    exit /b
)
if exist C:\User\%USERNAME%\Documents\workspace\out\log\*.xlsx (
    ::moves all log files to workBackup folder
    move "C:\Users\%USERNAME%\Documents\workspace\out\log\"*.log C:\Users\%USERNAME%\Desktop\workBackup\%TIMESTAMP%\logs
) else (
    ::exits if file no files are found
    echo "Files not found" 
    exit /b
)

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    有几件事要提

    • 日期格式是每个用户设置的,最好从 wmic 获取日期
    • 创建文件夹结构时,最深的一个将隐含另一个
    • 不要测试、制造和抑制最终的错误消息。
    • 通过创建变量减少容易出错的冗余
    • 在整个路径周围加上双引号,而不仅仅是它的一部分

    @echo off
    for /f %%A in ('wmic os get LocalDateTime^|findstr ^^[0-9]') do Set _DT=%%A
    Set yy=%_DT:~0,4%&Set MM=%_DT:~4,2%&Set dd=%_DT:~6,2%
    
    Set "WBu=C:\Users\%USERNAME%\Desktop\workBackup"
    Set "WBuDT=%WBu%\%dd%%MM%%yy%"
    :: or reverse day and month %MM%%dd%%yy%
    Set "WSpOL=C:\Users\%USERNAME%\Documents\workspace\out\log"
    
    mkdir "%WBuDT%\logs" 2>NUL
    
    ::moves all xlsx files to workBackup folder
    move "%WSpOL%\*.xlsx" "%WBuDT%\" 2>NUL||(Echo "%WSpOL%\*.xlsx" not found&Exit /b)
    
    ::moves all log files to workBackup folder
    move "%WSpOL%\*.log" "%WBuDT%\logs\" 2>NUL||(Echo "%WSpOL%\*.log" not found&Exit /b)
    

    【讨论】:

    • 哇,感谢所有反馈和帮助。明天当我的系统可用时,我会试试这个!
    • 刚试了下,还是找不到文件。我通过注释掉 move 命令来尝试这两种类型。还有其他想法吗?
    • 有一个错字(用户中缺少 s)否则我在这里做了一个测试,创建了所有文件夹并且批处理按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2013-03-13
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多