https://git.reactos.org/?p=reactos.git;a=commitdiff;h=189f6485841eb6b600069…
commit 189f6485841eb6b600069a7f938979cc44318743
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Fri Nov 29 20:03:19 2019 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Fri Nov 29 20:03:19 2019 +0900
[CMDUTILS][ATTRIB] Support folder attributes (#2103)
CORE-16538
---
base/applications/cmdutils/attrib/attrib.c | 165 ++++++++++++++----------
base/applications/cmdutils/attrib/lang/cs-CZ.rc | 1 +
base/applications/cmdutils/attrib/lang/de-DE.rc | 1 +
base/applications/cmdutils/attrib/lang/el-GR.rc | 1 +
base/applications/cmdutils/attrib/lang/en-US.rc | 1 +
base/applications/cmdutils/attrib/lang/es-ES.rc | 1 +
base/applications/cmdutils/attrib/lang/fr-FR.rc | 1 +
base/applications/cmdutils/attrib/lang/hu-HU.rc | 1 +
base/applications/cmdutils/attrib/lang/id-ID.rc | 1 +
base/applications/cmdutils/attrib/lang/it-IT.rc | 1 +
base/applications/cmdutils/attrib/lang/ja-JP.rc | 1 +
base/applications/cmdutils/attrib/lang/no-NO.rc | 1 +
base/applications/cmdutils/attrib/lang/pl-PL.rc | 1 +
base/applications/cmdutils/attrib/lang/ro-RO.rc | 1 +
base/applications/cmdutils/attrib/lang/ru-RU.rc | 1 +
base/applications/cmdutils/attrib/lang/sk-SK.rc | 1 +
base/applications/cmdutils/attrib/lang/sq-AL.rc | 1 +
base/applications/cmdutils/attrib/lang/sv-SE.rc | 1 +
base/applications/cmdutils/attrib/lang/tr-TR.rc | 1 +
base/applications/cmdutils/attrib/lang/uk-UA.rc | 1 +
base/applications/cmdutils/attrib/lang/zh-CN.rc | 1 +
base/applications/cmdutils/attrib/lang/zh-TW.rc | 1 +
base/applications/cmdutils/attrib/resource.h | 1 +
23 files changed, 118 insertions(+), 69 deletions(-)
diff --git a/base/applications/cmdutils/attrib/attrib.c
b/base/applications/cmdutils/attrib/attrib.c
index 141ad497285..3d35fa403c0 100644
--- a/base/applications/cmdutils/attrib/attrib.c
+++ b/base/applications/cmdutils/attrib/attrib.c
@@ -72,7 +72,7 @@ ErrorMessage(
NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPWSTR)&szError, 0, NULL))
{
- ConPrintf(StdErr, L"%s %s\n", szError, szMessage);
+ ConPrintf(StdOut, L"%s %s\n", szError, szMessage);
if (szError)
LocalFree(szError);
return;
@@ -81,9 +81,9 @@ ErrorMessage(
/* Fall back just in case the error is not defined */
LoadStringW(GetModuleHandle(NULL), STRING_CONSOLE_ERROR, szMsg, ARRAYSIZE(szMsg));
if (szFormat)
- ConPrintf(StdErr, L"%s -- %s\n", szMsg, szMessage);
+ ConPrintf(StdOut, L"%s -- %s\n", szMsg, szMessage);
else
- ConPrintf(StdErr, L"%s\n", szMsg);
+ ConPrintf(StdOut, L"%s\n", szMsg);
}
static
@@ -145,9 +145,6 @@ PrintAttribute(
do
{
- if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- continue;
-
wcscpy(pszFileName, findData.cFileName);
ConPrintf(StdOut,
@@ -166,7 +163,7 @@ PrintAttribute(
static
-INT
+BOOL
ChangeAttribute(
LPWSTR pszPath,
LPWSTR pszFile,
@@ -180,75 +177,102 @@ ChangeAttribute(
DWORD dwAttribute;
WCHAR szFullName[MAX_PATH];
LPWSTR pszFileName;
+ BOOL bWildcard = (wcschr(pszFile, L'*') || wcschr(pszFile, L'?'));
/* prepare full file name buffer */
wcscpy(szFullName, pszPath);
pszFileName = szFullName + wcslen(szFullName);
- /* change all subdirectories */
- if (bRecurse)
- {
- /* append file name */
- wcscpy(pszFileName, L"*.*");
+ /* append file name */
+ wcscpy(pszFileName, pszFile);
- hFind = FindFirstFileW(szFullName, &findData);
- if (hFind == INVALID_HANDLE_VALUE)
+ hFind = FindFirstFileW(szFullName, &findData);
+ if (hFind == INVALID_HANDLE_VALUE)
+ return FALSE;
+
+ dwAttribute = findData.dwFileAttributes;
+
+ if (!bWildcard)
+ {
+ FindClose(hFind);
+ if (dwAttribute & FILE_ATTRIBUTE_DIRECTORY)
{
- ErrorMessage(GetLastError(), pszFile);
- return 1;
+ dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+ SetFileAttributes(szFullName, dwAttribute);
+ if (bRecurse)
+ {
+ if (bDirectories)
+ {
+ ChangeAttribute(szFullName, L"*", dwMask, dwAttrib,
+ bRecurse, bDirectories);
+ }
+ else
+ {
+ if (!ChangeAttribute(szFullName, L"*", dwMask, dwAttrib,
+ bRecurse, FALSE))
+ {
+ return FALSE;
+ }
+ }
+ }
+ else
+ {
+ if (!bDirectories)
+ {
+ ChangeAttribute(szFullName, L"*", dwMask, dwAttrib,
+ bRecurse, FALSE);
+ }
+ }
+ return TRUE;
+ }
+ else
+ {
+ dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+ SetFileAttributes(szFullName, dwAttribute);
+ return TRUE;
}
+ }
+ else
+ {
+ if ((dwAttribute & FILE_ATTRIBUTE_DIRECTORY) && (!bRecurse ||
!bDirectories))
+ return FALSE;
do
{
- if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ dwAttribute = findData.dwFileAttributes;
+ if (dwAttribute & FILE_ATTRIBUTE_DIRECTORY)
{
+ if (!bDirectories)
+ continue;
+
if (!wcscmp(findData.cFileName, L".") ||
!wcscmp(findData.cFileName, L".."))
continue;
wcscpy(pszFileName, findData.cFileName);
- wcscat(pszFileName, L"\\");
-
- ChangeAttribute(szFullName, pszFile, dwMask,
- dwAttrib, bRecurse, bDirectories);
+ dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+ SetFileAttributes(szFullName, dwAttribute);
+
+ if (bRecurse)
+ {
+ ChangeAttribute(szFullName, findData.cFileName, dwMask,
+ dwAttrib, bRecurse, FALSE);
+ }
}
- }
- while (FindNextFileW(hFind, &findData));
- FindClose(hFind);
- }
-
- /* append file name */
- wcscpy(pszFileName, pszFile);
-
- hFind = FindFirstFileW(szFullName, &findData);
- if (hFind == INVALID_HANDLE_VALUE)
- {
- ErrorMessage(GetLastError(), pszFile);
- return 1;
- }
-
- do
- {
- if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- continue;
-
- wcscpy(pszFileName, findData.cFileName);
-
- dwAttribute = GetFileAttributes (szFullName);
+ else
+ {
+ wcscpy(pszFileName, findData.cFileName);
+ dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+ SetFileAttributes(szFullName, dwAttribute);
+ }
+ } while (FindNextFileW(hFind, &findData));
- if (dwAttribute != 0xFFFFFFFF)
- {
- dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
- SetFileAttributes(szFullName, dwAttribute);
- }
+ FindClose(hFind);
}
- while (FindNextFileW(hFind, &findData));
- FindClose(hFind);
- return 0;
+ return TRUE;
}
-
int wmain(int argc, WCHAR *argv[])
{
INT i;
@@ -258,6 +282,8 @@ int wmain(int argc, WCHAR *argv[])
BOOL bDirectories = FALSE;
DWORD dwAttrib = 0;
DWORD dwMask = 0;
+ LPWSTR p;
+ WCHAR szText[MAX_PATH];
/* Initialize the Console Standard Streams */
ConInitStdStreams();
@@ -285,7 +311,7 @@ int wmain(int argc, WCHAR *argv[])
{
if (wcslen(argv[i]) != 2)
{
- ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
return -1;
}
@@ -312,7 +338,7 @@ int wmain(int argc, WCHAR *argv[])
break;
default:
- ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
return -1;
}
}
@@ -320,7 +346,7 @@ int wmain(int argc, WCHAR *argv[])
{
if (wcslen(argv[i]) != 2)
{
- ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
return -1;
}
@@ -347,7 +373,7 @@ int wmain(int argc, WCHAR *argv[])
break;
default:
- ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
+ ConResPrintf(StdOut, STRING_ERROR_INVALID_PARAM_FORMAT, argv[i]);
return -1;
}
}
@@ -371,20 +397,21 @@ int wmain(int argc, WCHAR *argv[])
/* get full file name */
for (i = 1; i < argc; i++)
{
- if ((*argv[i] != L'+') && (*argv[i] != L'-') &&
(*argv[i] != L'/'))
- {
- LPWSTR p;
+ if (*argv[i] == L'+' || *argv[i] == L'-' || *argv[i] ==
L'/')
+ continue;
- GetFullPathName(argv[i], MAX_PATH, szPath, NULL);
- p = wcsrchr(szPath, L'\\') + 1;
- wcscpy(szFileName, p);
- *p = L'\0';
+ GetFullPathNameW(argv[i], MAX_PATH, szPath, &p);
+ wcscpy(szFileName, p);
+ *p = 0;
- if (dwMask == 0)
- PrintAttribute(szPath, szFileName, bRecurse);
- else
- ChangeAttribute(szPath, szFileName, dwMask,
- dwAttrib, bRecurse, bDirectories);
+ if (dwMask == 0)
+ {
+ PrintAttribute(szPath, szFileName, bRecurse);
+ }
+ else if (!ChangeAttribute(szPath, szFileName, dwMask,
+ dwAttrib, bRecurse, bDirectories))
+ {
+ ConResPrintf(StdOut, STRING_FILE_NOT_FOUND, argv[i]);
}
}
diff --git a/base/applications/cmdutils/attrib/lang/cs-CZ.rc
b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
index d67fffd3dfb..5798313832c 100644
--- a/base/applications/cmdutils/attrib/lang/cs-CZ.rc
+++ b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
@@ -7,6 +7,7 @@ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/de-DE.rc
b/base/applications/cmdutils/attrib/lang/de-DE.rc
index 44791186be6..934496e3b75 100644
--- a/base/applications/cmdutils/attrib/lang/de-DE.rc
+++ b/base/applications/cmdutils/attrib/lang/de-DE.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Zeigt Dateiattribute an oder ändert sie.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] Dateiname ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/el-GR.rc
b/base/applications/cmdutils/attrib/lang/el-GR.rc
index dcfc19fb746..61b9646ccf8 100644
--- a/base/applications/cmdutils/attrib/lang/el-GR.rc
+++ b/base/applications/cmdutils/attrib/lang/el-GR.rc
@@ -7,6 +7,7 @@ LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Προβολή ή αλλαγή των χαρακτηριστικών των αρχείων.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/en-US.rc
b/base/applications/cmdutils/attrib/lang/en-US.rc
index 692b04c013c..340a3db2b19 100644
--- a/base/applications/cmdutils/attrib/lang/en-US.rc
+++ b/base/applications/cmdutils/attrib/lang/en-US.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/es-ES.rc
b/base/applications/cmdutils/attrib/lang/es-ES.rc
index 8271d4784cb..a84e1753e23 100644
--- a/base/applications/cmdutils/attrib/lang/es-ES.rc
+++ b/base/applications/cmdutils/attrib/lang/es-ES.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Muestra o cambia los atributos de los archivos.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/fr-FR.rc
b/base/applications/cmdutils/attrib/lang/fr-FR.rc
index d330ba51f3b..99c22f35ae9 100644
--- a/base/applications/cmdutils/attrib/lang/fr-FR.rc
+++ b/base/applications/cmdutils/attrib/lang/fr-FR.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Affiche ou change des attributs de fichiers.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/hu-HU.rc
b/base/applications/cmdutils/attrib/lang/hu-HU.rc
index 37d8d22ad96..8e5e3d0ff7b 100644
--- a/base/applications/cmdutils/attrib/lang/hu-HU.rc
+++ b/base/applications/cmdutils/attrib/lang/hu-HU.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Állományok attribútumok megjelenítése vagy
beállításai.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] állomány ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/id-ID.rc
b/base/applications/cmdutils/attrib/lang/id-ID.rc
index 74ac009a952..31ed914c8aa 100644
--- a/base/applications/cmdutils/attrib/lang/id-ID.rc
+++ b/base/applications/cmdutils/attrib/lang/id-ID.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Menampilkan atau mengubah atribut file.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/it-IT.rc
b/base/applications/cmdutils/attrib/lang/it-IT.rc
index 70d47fc74c4..a4f6a2a1c21 100644
--- a/base/applications/cmdutils/attrib/lang/it-IT.rc
+++ b/base/applications/cmdutils/attrib/lang/it-IT.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Visualizza o modifica gli attributi dei file.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/ja-JP.rc
b/base/applications/cmdutils/attrib/lang/ja-JP.rc
index 79e2c7652fd..9125d067cb7 100644
--- a/base/applications/cmdutils/attrib/lang/ja-JP.rc
+++ b/base/applications/cmdutils/attrib/lang/ja-JP.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "ファイル属性を表示または変更します。\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [ファイル] ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/no-NO.rc
b/base/applications/cmdutils/attrib/lang/no-NO.rc
index 095e18be0b2..fdc13654108 100644
--- a/base/applications/cmdutils/attrib/lang/no-NO.rc
+++ b/base/applications/cmdutils/attrib/lang/no-NO.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Viser eller endrer filattributtene.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/pl-PL.rc
b/base/applications/cmdutils/attrib/lang/pl-PL.rc
index 42543e60b3a..3776b95160e 100644
--- a/base/applications/cmdutils/attrib/lang/pl-PL.rc
+++ b/base/applications/cmdutils/attrib/lang/pl-PL.rc
@@ -11,6 +11,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Wyświetla lub zmienia atrybuty plików.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] nazwa_pliku ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/ro-RO.rc
b/base/applications/cmdutils/attrib/lang/ro-RO.rc
index 73eed7eaf11..05f858aae75 100644
--- a/base/applications/cmdutils/attrib/lang/ro-RO.rc
+++ b/base/applications/cmdutils/attrib/lang/ro-RO.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Afișează sau modifică atributele de fișiere.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fișier ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/ru-RU.rc
b/base/applications/cmdutils/attrib/lang/ru-RU.rc
index 8cea9affee4..c2390e95f35 100644
--- a/base/applications/cmdutils/attrib/lang/ru-RU.rc
+++ b/base/applications/cmdutils/attrib/lang/ru-RU.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Вывод и изменение атрибутов файлов.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/sk-SK.rc
b/base/applications/cmdutils/attrib/lang/sk-SK.rc
index 281a003325b..e883b13c2e3 100644
--- a/base/applications/cmdutils/attrib/lang/sk-SK.rc
+++ b/base/applications/cmdutils/attrib/lang/sk-SK.rc
@@ -8,6 +8,7 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Displays or changes file attributes.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/sq-AL.rc
b/base/applications/cmdutils/attrib/lang/sq-AL.rc
index ca39be06934..cddde01e7c5 100644
--- a/base/applications/cmdutils/attrib/lang/sq-AL.rc
+++ b/base/applications/cmdutils/attrib/lang/sq-AL.rc
@@ -6,6 +6,7 @@ LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Shfaq ose ndryshu atributet e dokumentave.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/sv-SE.rc
b/base/applications/cmdutils/attrib/lang/sv-SE.rc
index 236baf7c6a2..2406f5316b1 100644
--- a/base/applications/cmdutils/attrib/lang/sv-SE.rc
+++ b/base/applications/cmdutils/attrib/lang/sv-SE.rc
@@ -2,6 +2,7 @@ LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Visar eller ändrar filattributen.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/tr-TR.rc
b/base/applications/cmdutils/attrib/lang/tr-TR.rc
index d96c764e2e6..7bfd8c3e1ae 100644
--- a/base/applications/cmdutils/attrib/lang/tr-TR.rc
+++ b/base/applications/cmdutils/attrib/lang/tr-TR.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Kütük öz niteliklerini görüntüler ya da değiştirir.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] kütük ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/uk-UA.rc
b/base/applications/cmdutils/attrib/lang/uk-UA.rc
index 6591e433459..957e589f2d1 100644
--- a/base/applications/cmdutils/attrib/lang/uk-UA.rc
+++ b/base/applications/cmdutils/attrib/lang/uk-UA.rc
@@ -10,6 +10,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "Відображення або зміна атрибутів файлу.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/zh-CN.rc
b/base/applications/cmdutils/attrib/lang/zh-CN.rc
index a4d10f23bff..c3184d47eb8 100644
--- a/base/applications/cmdutils/attrib/lang/zh-CN.rc
+++ b/base/applications/cmdutils/attrib/lang/zh-CN.rc
@@ -4,6 +4,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "显示或更改文件属性。\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 文件 ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/lang/zh-TW.rc
b/base/applications/cmdutils/attrib/lang/zh-TW.rc
index c1fb32005c0..8b61dd6c714 100644
--- a/base/applications/cmdutils/attrib/lang/zh-TW.rc
+++ b/base/applications/cmdutils/attrib/lang/zh-TW.rc
@@ -5,6 +5,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
BEGIN
+ STRING_FILE_NOT_FOUND "File not found - '%s'\n"
STRING_ATTRIB_HELP "顯示或更改檔案屬性。\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 檔案 ...\n\
[/S [/D]]\n\n\
diff --git a/base/applications/cmdutils/attrib/resource.h
b/base/applications/cmdutils/attrib/resource.h
index 3b44432714c..e55a2ed845a 100644
--- a/base/applications/cmdutils/attrib/resource.h
+++ b/base/applications/cmdutils/attrib/resource.h
@@ -5,3 +5,4 @@
#define STRING_ERROR_INVALID_PARAM_FORMAT 107
#define STRING_CONSOLE_ERROR 316
#define STRING_ATTRIB_HELP 600
+#define STRING_FILE_NOT_FOUND 100