Batch file 找到具有相同扩展名批处理脚本的多个文件

Batch file 找到具有相同扩展名批处理脚本的多个文件,batch-file,Batch File,我正在编写这个批处理脚本,但当它开始考虑是否存在一个文件扩展名的所有文件时,它会去做其他事情,甚至是那些文件存在的事情。提前谢谢你的帮助 @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%%D

我正在编写这个批处理脚本,但当它开始考虑是否存在一个文件扩展名的所有文件时,它会去做其他事情,甚至是那些文件存在的事情。提前谢谢你的帮助

@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
)

有几件事值得一提

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


哇,谢谢你的反馈和帮助。明天我的系统可用时,我会尝试这个!刚试过,还是找不到文件。我通过注释move命令尝试了这两种类型。还有其他想法吗?有一个打字错误(用户中缺少s),我在这里做了一个测试,创建了所有的文件夹,并按预期批量工作。
@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)