Windows 具有文件属性的条件编程(批处理文件)

Windows 具有文件属性的条件编程(批处理文件),windows,batch-file,command-line,command-line-arguments,Windows,Batch File,Command Line,Command Line Arguments,我正在尝试构建一个简单的批处理文件,该文件将根据是否设置了存档标志来备份文档,但是我不确定如何检查是否设置了存档标志。到目前为止,这就是我所知道的,但我不确定attrib语法(或者这是否是正确的命令)。此版本的错误是,此时不需要%1变量(文件名) @echo off Rem **** Clears Screen **** cls Rem **** Ensure backup directory exists **** if exist C:\backup\nul echo Backup di

我正在尝试构建一个简单的批处理文件,该文件将根据是否设置了存档标志来备份文档,但是我不确定如何检查是否设置了存档标志。到目前为止,这就是我所知道的,但我不确定attrib语法(或者这是否是正确的命令)。此版本的错误是,此时不需要%1变量(文件名)

@echo off

Rem **** Clears Screen ****
cls

Rem **** Ensure backup directory exists ****
if exist C:\backup\nul echo Backup directory located
if not exist C:\backup\nul echo Creating backup directory
if not exist C:\backup\nul mkdir C:\backup

Rem **** Checks if it has already been copied with archive flag ****
if attrib %1 equ +a goto nocopy
if attrib %1 equ -a goto copy

Rem **** Do not copy ****
:nocopy
echo File has already been backed up
pause

Rem **** Copies file ****
:copy
echo Copying %1
copy %1 C:\backup\%1
echo %1 backed up successfully!
pause

要使用
%1
作为文件的引用,应将其传递到批处理文件

backupbatch.cmd miFileToCopy.txt
在批处理文件中,请记住检查是否传递了文件名

if "%~1"=="" exit /b
然后检查存档标志

set "fileAttribs=%~a1"
if "%fileAttribs:~2,1%"=="a" (
    echo flag is set 
) else (
    echo flag is not set
)
%~a1
是在%1中引用的文件的属性列表。属性列表中的第三个位置是归档标志。测试
a
值(批处理字符串中的第一个位置为0),以查看是否设置了该标志

find
命令可用于测试标志是否存在

echo %~a1 | find "a" >nul && goto doCopy || goto noCopy

xcopy
可以处理归档属性。请参见参数
/a
或-更好的是-
/m