【问题标题】:Conditional programming with file attributes (Batch files)具有文件属性的条件编程(批处理文件)
【发布时间】:2014-03-06 05:53:42
【问题描述】:

我正在尝试构建一个简单的批处理文件,该文件将根据是否已设置存档标志来备份文档,但是我不确定如何检查是否已设置存档标志。这是我到目前为止所拥有的,但我不确定属性语法(或者这是否是正确的命令)。我在这个版本中得到的错误是它此时不需要 %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

【问题讨论】:

  • xcopy 可以处理归档属性。请参阅参数 /a 或 - 甚至更好 - /m

标签: windows batch-file command-line command-line-arguments


【解决方案1】:

要使用%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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多