我希望批处理脚本根据文件的文件属性执行特定命令。例如:
The requested route [/routeexemple/users/] has not been mapped in Spark
谢谢!
答案 0 :(得分:3)
键入FOR
以获取有关如何获取文件属性的信息。对于分配给文件的%f
变量(例如%~af
),您可以使用setlocal enabledelayedexpansion
for %%f in ("%windir%\system32\bcrypt.dll") do (
set attributes=%%~af
if "!attributes:h=!" neq "!attributes!" echo File is hidden.
if "!attributes:r=!" neq "!attributes!" echo File is read-only.
)
获取其属性。因此,要检查它是否具有R和H属性:
for
警告:如果文件是隐藏的,则需要在$query = "UPDATE `tablename`
SET
unsubscribed = 1
WHERE
email = (SELECT email from `tablename` WHERE id = " . $id . ")
";
命令中明确命名。如果使用通配符,则无法找到该文件。
答案 1 :(得分:2)
@echo off
setlocal enableDelayedExpansion
for /f "tokens=* delims=" %%a in ('attrib "%windir%\system32\bcrypt.dll"') do (
set "attributes=%%a"
set "attributes=!attributes:~0,13!"
)
set "HR=%attributes:~4,2%"
if "!HR!" equ "HR" (
echo attributes matching
) else (
echo attributes not matching
)
H和R位于属性的第5和第6位置。如果已设置,则需要按此顺序进行检查。
答案 2 :(得分:2)
@echo off
setlocal enableextensions disabledelayedexpansion
for %%a in ("%windir%\system32\bcrypt.dll") do (
set "RO_AND_H=1"
( for /f "tokens=2 delims=r" %%b in ("%%~aa") do break ) || set "RO_AND_H="
( for /f "tokens=2 delims=h" %%b in ("%%~aa") do break ) || set "RO_AND_H="
if defined RO_AND_H (
echo File is readonly and hidden
) else (
echo File attributes don't match
)
)
正如已经指出的那样,~a
可替换参数的for
修饰符返回文件的属性列表,这是一个包含九个破折号的字符串,其中每个破折号都被一个字母替换,以表示存在属性(更多here)。
FILE_ATTRIBUTE_DIRECTORY d--------
FILE_ATTRIBUTE_READONLY -r-------
FILE_ATTRIBUTE_ARCHIVE --a------
FILE_ATTRIBUTE_HIDDEN ---h-----
FILE_ATTRIBUTE_SYSTEM ----s----
FILE_ATTRIBUTE_COMPRESSED -----c---
FILE_ATTRIBUTE_OFFLINE ------o--
FILE_ATTRIBUTE_TEMPORARY -------t-
FILE_ATTRIBUTE_REPARSE_POINT --------l
FILE_ATTRIBUTE_NORMAL ---------
对于每个必需属性,代码使用want属性作为分隔符对此字符串进行标记,并尝试检索第二个标记。
如果设置了属性,列表将被拆分为两个,并且会有第二个令牌,因此执行do
命令的for /f
子句中的代码(break
用来做什么都没用。
如果该属性不存在,则该行不会被分割,将不会有第二个令牌,do
子句中的代码将不会被处理,并且将设置一个失败标志,由条件运算符捕获||
(如果先前失败则运行下一个命令)清除标志变量。