https://git.reactos.org/?p=reactos.git;a=commitdiff;h=432854ee18eb002049a058b5b233d8acc25ce76f

commit 432854ee18eb002049a058b5b233d8acc25ce76f
Author:     Eric Kohl <[email protected]>
AuthorDate: Sat Sep 21 11:39:01 2019 +0200
Commit:     Eric Kohl <[email protected]>
CommitDate: Sat Sep 21 11:41:15 2019 +0200

    [ATTRIB][CMD] Convert the 'attrib' command into a standalone executable
    
    CORE-9444
---
 base/applications/cmdutils/CMakeLists.txt        |   1 +
 base/applications/cmdutils/attrib/CMakeLists.txt |   8 +
 base/applications/cmdutils/attrib/attrib.c       | 392 +++++++++++++++++++++++
 base/applications/cmdutils/attrib/attrib.rc      |  77 +++++
 base/applications/cmdutils/attrib/lang/cs-CZ.rc  |  25 ++
 base/applications/cmdutils/attrib/lang/de-DE.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/el-GR.rc  |  25 ++
 base/applications/cmdutils/attrib/lang/en-US.rc  |  20 ++
 base/applications/cmdutils/attrib/lang/es-ES.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/fr-FR.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/hu-HU.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/id-ID.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/it-IT.rc  |  20 ++
 base/applications/cmdutils/attrib/lang/ja-JP.rc  |  20 ++
 base/applications/cmdutils/attrib/lang/no-NO.rc  |  20 ++
 base/applications/cmdutils/attrib/lang/pl-PL.rc  |  29 ++
 base/applications/cmdutils/attrib/lang/ro-RO.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/ru-RU.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/sk-SK.rc  |  26 ++
 base/applications/cmdutils/attrib/lang/sq-AL.rc  |  24 ++
 base/applications/cmdutils/attrib/lang/sv-SE.rc  |  20 ++
 base/applications/cmdutils/attrib/lang/tr-TR.rc  |  22 ++
 base/applications/cmdutils/attrib/lang/uk-UA.rc  |  28 ++
 base/applications/cmdutils/attrib/lang/zh-CN.rc  |  21 ++
 base/applications/cmdutils/attrib/lang/zh-TW.rc  |  22 ++
 base/applications/cmdutils/attrib/resource.h     |   7 +
 base/shell/cmd/CMakeLists.txt                    |   1 -
 base/shell/cmd/attrib.c                          | 344 --------------------
 base/shell/cmd/cmd.h                             |   3 -
 base/shell/cmd/cmdtable.c                        |   4 -
 base/shell/cmd/config.h                          |   1 -
 base/shell/cmd/lang/cs-CZ.rc                     |  13 -
 base/shell/cmd/lang/de-DE.rc                     |  13 -
 base/shell/cmd/lang/el-GR.rc                     |  13 -
 base/shell/cmd/lang/en-US.rc                     |  13 -
 base/shell/cmd/lang/es-ES.rc                     |  13 -
 base/shell/cmd/lang/fr-FR.rc                     |  13 -
 base/shell/cmd/lang/hu-HU.rc                     |  13 -
 base/shell/cmd/lang/id-ID.rc                     |  13 -
 base/shell/cmd/lang/it-IT.rc                     |  13 -
 base/shell/cmd/lang/ja-JP.rc                     |  13 -
 base/shell/cmd/lang/no-NO.rc                     |  13 -
 base/shell/cmd/lang/pl-PL.rc                     |  13 -
 base/shell/cmd/lang/ro-RO.rc                     |  13 -
 base/shell/cmd/lang/ru-RU.rc                     |  13 -
 base/shell/cmd/lang/sk-SK.rc                     |  13 -
 base/shell/cmd/lang/sq-AL.rc                     |  13 -
 base/shell/cmd/lang/sv-SE.rc                     |  13 -
 base/shell/cmd/lang/tr-TR.rc                     |  13 -
 base/shell/cmd/lang/uk-UA.rc                     |  13 -
 base/shell/cmd/lang/zh-CN.rc                     |  12 -
 base/shell/cmd/lang/zh-TW.rc                     |  12 -
 base/shell/cmd/resource.h                        |   1 -
 53 files changed, 961 insertions(+), 625 deletions(-)

diff --git a/base/applications/cmdutils/CMakeLists.txt 
b/base/applications/cmdutils/CMakeLists.txt
index 2ca3a2b9004..20f8529aa78 100644
--- a/base/applications/cmdutils/CMakeLists.txt
+++ b/base/applications/cmdutils/CMakeLists.txt
@@ -1,4 +1,5 @@
 add_subdirectory(at)
+add_subdirectory(attrib)
 add_subdirectory(chcp)
 add_subdirectory(clip)
 add_subdirectory(comp)
diff --git a/base/applications/cmdutils/attrib/CMakeLists.txt 
b/base/applications/cmdutils/attrib/CMakeLists.txt
new file mode 100644
index 00000000000..a2b75f4ec5f
--- /dev/null
+++ b/base/applications/cmdutils/attrib/CMakeLists.txt
@@ -0,0 +1,8 @@
+
+include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
+
+add_executable(attrib attrib.c attrib.rc)
+set_module_type(attrib win32cui UNICODE)
+target_link_libraries(attrib conutils ${PSEH_LIB})
+add_importlibs(attrib user32 msvcrt kernel32)
+add_cd_file(TARGET attrib DESTINATION reactos/system32 FOR all)
diff --git a/base/applications/cmdutils/attrib/attrib.c 
b/base/applications/cmdutils/attrib/attrib.c
new file mode 100644
index 00000000000..141ad497285
--- /dev/null
+++ b/base/applications/cmdutils/attrib/attrib.c
@@ -0,0 +1,392 @@
+/*
+ *  ATTRIB.C - attrib internal command.
+ *
+ *
+ *  History:
+ *
+ *    04-Dec-1998 Eric Kohl
+ *        started
+ *
+ *    09-Dec-1998 Eric Kohl
+ *        implementation works, except recursion ("attrib /s").
+ *
+ *    05-Jan-1999 Eric Kohl
+ *        major rewrite.
+ *        fixed recursion ("attrib /s").
+ *        started directory support ("attrib /s /d").
+ *        updated help text.
+ *
+ *    14-Jan-1999 Eric Kohl
+ *        Unicode ready!
+ *
+ *    19-Jan-1999 Eric Kohl
+ *        Redirection ready!
+ *
+ *    21-Jan-1999 Eric Kohl
+ *        Added check for invalid filenames.
+ *
+ *    23-Jan-1999 Eric Kohl
+ *        Added handling of multiple filenames.
+ *
+ *    02-Apr-2005 (Magnus Olsen <[email protected]>)
+ *        Remove all hardcoded strings in En.rc
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <wincon.h>
+#include <winuser.h>
+
+#include <conutils.h>
+
+#include "resource.h"
+
+CON_SCREEN StdOutScreen = INIT_CON_SCREEN(StdOut);
+
+static
+VOID
+ErrorMessage(
+    DWORD dwErrorCode,
+    LPWSTR szFormat,
+    ...)
+{
+    WCHAR szMsg[RC_STRING_MAX_SIZE];
+    WCHAR  szMessage[1024];
+    LPWSTR szError;
+    va_list arg_ptr;
+
+    if (dwErrorCode == ERROR_SUCCESS)
+        return;
+
+    if (szFormat)
+    {
+        va_start(arg_ptr, szFormat);
+        vswprintf(szMessage, szFormat, arg_ptr);
+        va_end(arg_ptr);
+    }
+
+    if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | 
FORMAT_MESSAGE_ALLOCATE_BUFFER,
+                       NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, 
SUBLANG_DEFAULT),
+                       (LPWSTR)&szError, 0, NULL))
+    {
+        ConPrintf(StdErr, L"%s %s\n", szError, szMessage);
+        if (szError)
+            LocalFree(szError);
+        return;
+    }
+
+    /* 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);
+    else
+        ConPrintf(StdErr, L"%s\n", szMsg);
+}
+
+static
+INT
+PrintAttribute(
+    LPWSTR pszPath,
+    LPWSTR pszFile,
+    BOOL bRecurse)
+{
+    WIN32_FIND_DATAW findData;
+    HANDLE hFind;
+    WCHAR  szFullName[MAX_PATH];
+    LPWSTR pszFileName;
+
+    /* prepare full file name buffer */
+    wcscpy(szFullName, pszPath);
+    pszFileName = szFullName + wcslen(szFullName);
+
+    /* display all subdirectories */
+    if (bRecurse)
+    {
+        /* 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;
+
+            if (!wcscmp(findData.cFileName, L".") ||
+                !wcscmp(findData.cFileName, L".."))
+                continue;
+
+            wcscpy(pszFileName, findData.cFileName);
+            wcscat(pszFileName, L"\\");
+            PrintAttribute(szFullName, pszFile, bRecurse);
+        }
+        while(FindNextFileW(hFind, &findData));
+        FindClose(hFind);
+    }
+
+    /* append file name */
+    wcscpy(pszFileName, pszFile);
+
+    /* display current directory */
+    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);
+
+        ConPrintf(StdOut,
+                  L"%c  %c%c%c     %s\n",
+                  (findData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) ? L'A' 
: L' ',
+                  (findData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) ? L'S' : 
L' ',
+                  (findData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) ? L'H' : 
L' ',
+                  (findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? L'R' 
: L' ',
+                  szFullName);
+    }
+    while(FindNextFileW(hFind, &findData));
+    FindClose(hFind);
+
+    return 0;
+}
+
+
+static
+INT
+ChangeAttribute(
+    LPWSTR pszPath,
+    LPWSTR pszFile,
+    DWORD dwMask,
+    DWORD dwAttrib,
+    BOOL bRecurse,
+    BOOL bDirectories)
+{
+    WIN32_FIND_DATAW findData;
+    HANDLE hFind;
+    DWORD  dwAttribute;
+    WCHAR  szFullName[MAX_PATH];
+    LPWSTR pszFileName;
+
+    /* prepare full file name buffer */
+    wcscpy(szFullName, pszPath);
+    pszFileName = szFullName + wcslen(szFullName);
+
+    /* change all subdirectories */
+    if (bRecurse)
+    {
+        /* append file name */
+        wcscpy(pszFileName, L"*.*");
+
+        hFind = FindFirstFileW(szFullName, &findData);
+        if (hFind == INVALID_HANDLE_VALUE)
+        {
+            ErrorMessage(GetLastError(), pszFile);
+            return 1;
+        }
+
+        do
+        {
+            if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+            {
+                if (!wcscmp(findData.cFileName, L".") ||
+                    !wcscmp(findData.cFileName, L".."))
+                    continue;
+
+                wcscpy(pszFileName, findData.cFileName);
+                wcscat(pszFileName, L"\\");
+
+                ChangeAttribute(szFullName, pszFile, dwMask,
+                                dwAttrib, bRecurse, bDirectories);
+            }
+        }
+        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);
+
+        if (dwAttribute != 0xFFFFFFFF)
+        {
+            dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
+            SetFileAttributes(szFullName, dwAttribute);
+        }
+    }
+    while (FindNextFileW(hFind, &findData));
+    FindClose(hFind);
+
+    return 0;
+}
+
+
+int wmain(int argc, WCHAR *argv[])
+{
+    INT    i;
+    WCHAR  szPath[MAX_PATH];
+    WCHAR  szFileName [MAX_PATH];
+    BOOL   bRecurse = FALSE;
+    BOOL   bDirectories = FALSE;
+    DWORD  dwAttrib = 0;
+    DWORD  dwMask = 0;
+
+    /* Initialize the Console Standard Streams */
+    ConInitStdStreams();
+
+    /* Print help */
+    if (argc > 1 && wcscmp(argv[1], L"/?") == 0)
+    {
+        ConResPuts(StdOut, STRING_ATTRIB_HELP);
+        return 0;
+    }
+
+    /* check for options */
+    for (i = 1; i < argc; i++)
+    {
+        if (wcsicmp(argv[i], L"/s") == 0)
+            bRecurse = TRUE;
+        else if (wcsicmp(argv[i], L"/d") == 0)
+            bDirectories = TRUE;
+    }
+
+    /* create attributes and mask */
+    for (i = 1; i < argc; i++)
+    {
+        if (*argv[i] == L'+')
+        {
+            if (wcslen(argv[i]) != 2)
+            {
+                ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                return -1;
+            }
+
+            switch (towupper(argv[i][1]))
+            {
+                case L'A':
+                    dwMask   |= FILE_ATTRIBUTE_ARCHIVE;
+                    dwAttrib |= FILE_ATTRIBUTE_ARCHIVE;
+                    break;
+
+                case L'H':
+                    dwMask   |= FILE_ATTRIBUTE_HIDDEN;
+                    dwAttrib |= FILE_ATTRIBUTE_HIDDEN;
+                    break;
+
+                case L'R':
+                    dwMask   |= FILE_ATTRIBUTE_READONLY;
+                    dwAttrib |= FILE_ATTRIBUTE_READONLY;
+                    break;
+
+                case L'S':
+                    dwMask   |= FILE_ATTRIBUTE_SYSTEM;
+                    dwAttrib |= FILE_ATTRIBUTE_SYSTEM;
+                    break;
+
+                default:
+                    ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                    return -1;
+            }
+        }
+        else if (*argv[i] == L'-')
+        {
+            if (wcslen(argv[i]) != 2)
+            {
+                ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                return -1;
+            }
+
+            switch (towupper(argv[i][1]))
+            {
+                case L'A':
+                    dwMask   |= FILE_ATTRIBUTE_ARCHIVE;
+                    dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE;
+                    break;
+
+                case L'H':
+                    dwMask   |= FILE_ATTRIBUTE_HIDDEN;
+                    dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN;
+                    break;
+
+                case L'R':
+                    dwMask   |= FILE_ATTRIBUTE_READONLY;
+                    dwAttrib &= ~FILE_ATTRIBUTE_READONLY;
+                    break;
+
+                case L'S':
+                    dwMask   |= FILE_ATTRIBUTE_SYSTEM;
+                    dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM;
+                    break;
+
+                default:
+                    ConResPrintf(StdErr, STRING_ERROR_INVALID_PARAM_FORMAT, 
argv[i]);
+                    return -1;
+            }
+        }
+    }
+
+    if (argc == 1)
+    {
+        DWORD len;
+
+        len = GetCurrentDirectory(MAX_PATH, szPath);
+        if (szPath[len-1] != L'\\')
+        {
+            szPath[len] = L'\\';
+            szPath[len + 1] = UNICODE_NULL;
+        }
+        wcscpy(szFileName, L"*.*");
+        PrintAttribute(szPath, szFileName, bRecurse);
+        return 0;
+    }
+
+    /* get full file name */
+    for (i = 1; i < argc; i++)
+    {
+        if ((*argv[i] != L'+') && (*argv[i] != L'-') && (*argv[i] != L'/'))
+        {
+            LPWSTR p;
+
+            GetFullPathName(argv[i], MAX_PATH, szPath, NULL);
+            p = wcsrchr(szPath, L'\\') + 1;
+            wcscpy(szFileName, p);
+            *p = L'\0';
+
+            if (dwMask == 0)
+                PrintAttribute(szPath, szFileName, bRecurse);
+            else
+                ChangeAttribute(szPath, szFileName, dwMask,
+                         dwAttrib, bRecurse, bDirectories);
+        }
+    }
+
+    return 0;
+}
diff --git a/base/applications/cmdutils/attrib/attrib.rc 
b/base/applications/cmdutils/attrib/attrib.rc
new file mode 100644
index 00000000000..a199d758c18
--- /dev/null
+++ b/base/applications/cmdutils/attrib/attrib.rc
@@ -0,0 +1,77 @@
+#include <windef.h>
+
+#include "resource.h"
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_STR_FILE_DESCRIPTION    "ReactOS Attribute Command"
+#define REACTOS_STR_INTERNAL_NAME       "attrib"
+#define REACTOS_STR_ORIGINAL_FILENAME   "attrib.exe"
+#include <reactos/version.rc>
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+#ifdef LANGUAGE_CS_CZ
+    #include "lang/cs-CZ.rc"
+#endif
+#ifdef LANGUAGE_DE_DE
+    #include "lang/de-DE.rc"
+#endif
+#ifdef LANGUAGE_EL_GR
+    #include "lang/el-GR.rc"
+#endif
+#ifdef LANGUAGE_EN_US
+    #include "lang/en-US.rc"
+#endif
+#ifdef LANGUAGE_ES_ES
+    #include "lang/es-ES.rc"
+#endif
+#ifdef LANGUAGE_FR_FR
+    #include "lang/fr-FR.rc"
+#endif
+#ifdef LANGUAGE_HU_HU
+    #include "lang/hu-HU.rc"
+#endif
+#ifdef LANGUAGE_ID_ID
+    #include "lang/id-ID.rc"
+#endif
+#ifdef LANGUAGE_IT_IT
+    #include "lang/it-IT.rc"
+#endif
+#ifdef LANGUAGE_NB_NO
+    #include "lang/no-NO.rc"
+#endif
+#ifdef LANGUAGE_JA_JP
+    #include "lang/ja-JP.rc"
+#endif
+#ifdef LANGUAGE_PL_PL
+    #include "lang/pl-PL.rc"
+#endif
+#ifdef LANGUAGE_RO_RO
+    #include "lang/ro-RO.rc"
+#endif
+#ifdef LANGUAGE_RU_RU
+    #include "lang/ru-RU.rc"
+#endif
+#ifdef LANGUAGE_SK_SK
+    #include "lang/sk-SK.rc"
+#endif
+#ifdef LANGUAGE_SV_SE
+    #include "lang/sv-SE.rc"
+#endif
+#ifdef LANGUAGE_SQ_AL
+    #include "lang/sq-AL.rc"
+#endif
+#ifdef LANGUAGE_TR_TR
+    #include "lang/tr-TR.rc"
+#endif
+#ifdef LANGUAGE_UK_UA
+    #include "lang/uk-UA.rc"
+#endif
+#ifdef LANGUAGE_ZH_CN
+    #include "lang/zh-CN.rc"
+#endif
+#ifdef LANGUAGE_ZH_TW
+    #include "lang/zh-TW.rc"
+#endif
diff --git a/base/applications/cmdutils/attrib/lang/cs-CZ.rc 
b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
new file mode 100644
index 00000000000..d67fffd3dfb
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/cs-CZ.rc
@@ -0,0 +1,25 @@
+/* FILE:       base/shell/cmd/lang/cs-CZ.rc
+ * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com)
+ * UPDATED:    2015-04-12
+ */
+
+LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Sets an attribute\n\
+  -   Clears an attribute\n\
+  R   Read-only file attribute\n\
+  A   Archive file attribute\n\
+  S   System file attribute\n\
+  H   Hidden file attribute\n\
+  /S  Processes matching files in the current directory\n\
+      and all subdirectories\n\
+  /D  Processes directories as well\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+    STRING_CONSOLE_ERROR "Neznámá chyba: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Neplatný formát parametru - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/de-DE.rc 
b/base/applications/cmdutils/attrib/lang/de-DE.rc
new file mode 100644
index 00000000000..44791186be6
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/de-DE.rc
@@ -0,0 +1,22 @@
+/* German language file by Klemens Friedl <frik85> 2005-06-03 */
+
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Setzt ein Attribut\n\
+  -   Löscht ein Attribut\n\
+  R   Attribut für 'schreibgeschützte Datei'\n\
+  A   Attribut für 'zu archivierende Datei'\n\
+  S   Attribut für 'Systemdatei'\n\
+  H   Attribut für 'versteckte Datei'\n\
+ /S   Verarbeitet übereinstimmende Dateien im aktuellen Ordner\n\
+      und in allen Unterordnern.\n\
+  /D  Verarbeitet auch die Ordner.\n\n\
+ATTRIB ohne Parameter zeigt die derzeit gesetzten Attribute aller Dateien an."
+    STRING_CONSOLE_ERROR "Unbekannter Fehler: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Ungültiges Parameterformat - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/el-GR.rc 
b/base/applications/cmdutils/attrib/lang/el-GR.rc
new file mode 100644
index 00000000000..dcfc19fb746
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/el-GR.rc
@@ -0,0 +1,25 @@
+/*
+ * Αρχική έκδοση - Ημιτελής.
+ * Ελληνική μετάφραση - Απόστολος Αλεξιάδης
+ */
+
+LANGUAGE LANG_GREEK, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "Προβολή ή αλλαγή των χαρακτηριστικών των αρχείων.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
+       [/S [/D]]\n\n\
+  +   Ορισμός ενός χαρακτηριστικού.\n\
+  -   Απαλοιφή ενός χαρακτηριστικού.\n\
+  R   Χαρακτηριστικό αρχείου μόνο για ανάγνωση.\n\
+  A   Χαρακτηριστικό φύλαξης αρχείου.\n\
+  S   Χαρακτηριστικό αρχείου συστήματος.\n\
+  H   Χαρακτηριστικό κρυφού αρχείου.\n\
+  /S  Επεξεργασία των αρχείων που ταιριάζουν στον τρέχοντα κατάλογο\n\
+      και σε όλους τους υποκαταλόγους.\n\
+  /D  Επεξεργασία καταλόγων επίσης.\n\n\
+Πληκτρολογήστε ATTRIB χωρίς παράμετρο, για να εμφανιστούν τα χαρακτηριστικά 
όλων των αρχείων.\n"
+    STRING_CONSOLE_ERROR "Άγνωστο σφάλμα: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Μη έγκυρο φορμά παραμέτρου - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/en-US.rc 
b/base/applications/cmdutils/attrib/lang/en-US.rc
new file mode 100644
index 00000000000..692b04c013c
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/en-US.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Sets an attribute\n\
+  -   Clears an attribute\n\
+  R   Read-only file attribute\n\
+  A   Archive file attribute\n\
+  S   System file attribute\n\
+  H   Hidden file attribute\n\
+  /S  Processes matching files in the current directory\n\
+      and all subdirectories\n\
+  /D  Processes directories as well\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+    STRING_CONSOLE_ERROR "Unknown error: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Invalid parameter format - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/es-ES.rc 
b/base/applications/cmdutils/attrib/lang/es-ES.rc
new file mode 100644
index 00000000000..8271d4784cb
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/es-ES.rc
@@ -0,0 +1,22 @@
+/* Spanish translation by HUMA2000, Jose Pedro Fernández Pascual e Ismael 
Ferreras Morezuelas (Swyter) */
+
+LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Añade un atributo\n\
+  -   Borra un atributo\n\
+  R   Atributo de sólo lectura\n\
+  A   Atributo de archivo\n\
+  S   Atributo de archivo de sistema\n\
+  H   Atributo de archivo oculto\n\
+  /S  Procesa los archivos coincidentes en el directorio actual \n\
+      y sus subdirectorios\n\
+  /D  Procesa también los directorios\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+    STRING_CONSOLE_ERROR "Error desconocido: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Formato de parámetro erróneo - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/fr-FR.rc 
b/base/applications/cmdutils/attrib/lang/fr-FR.rc
new file mode 100644
index 00000000000..d330ba51f3b
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/fr-FR.rc
@@ -0,0 +1,22 @@
+/* French translation by Sylvain Pétréolle, Pierre Schweitzer */
+
+LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Positionne un attribut\n\
+  -   Enlève un attribut\n\
+  R   Fichier en lecture seule\n\
+  A   Fichier archive\n\
+  S   Fichier système\n\
+  H   Fichier caché\n\
+  /S  Traite les fichiers correspondants dans le répertoire courant\n\
+        et tous les sous-répertoires\n\
+  /D  Traite également les répertoires\n\n\
+Taper ATTRIB sans paramètre pour afficher les attributs de tous les fichiers."
+    STRING_CONSOLE_ERROR "Erreur inconnue : %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Format de paramètre incorrect - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/hu-HU.rc 
b/base/applications/cmdutils/attrib/lang/hu-HU.rc
new file mode 100644
index 00000000000..37d8d22ad96
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/hu-HU.rc
@@ -0,0 +1,22 @@
+/* Hungarian translation by Robert Horvath (talley at cubeclub.hu) 2005 */
+
+LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    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\
+  +   bekapcsol egy attribútumot\n\
+  -   kikapcsol egy attribútumot\n\
+  R   Írásvédett állomány\n\
+  A   Archiválandó állomány\n\
+  S   Rendszer állomány\n\
+  H   Rejtett állomány\n\
+  /S  Minden állomány módosítása a mappában és minden\n\
+      almappábanban\n\
+  /D  Mappákra is érvényesíti\n\n\
+Ha ATTRIB-ot paraméter nélkül írod be, megjeleníti a mappában található összes 
állományt és annak attribútumát.\n"
+    STRING_CONSOLE_ERROR "Ismeretlen hiba: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Érvénytelen paraméter megadás - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/id-ID.rc 
b/base/applications/cmdutils/attrib/lang/id-ID.rc
new file mode 100644
index 00000000000..74ac009a952
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/id-ID.rc
@@ -0,0 +1,22 @@
+/* Indonesian language file by Zaenal Mutaqin <ade999 at gmail dot com> 
2007-02-15 */
+
+LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Menyetel atribut\n\
+  -   Membersihkan atribut\n\
+  R   Atribut file Hanya-baca\n\
+  A   Atribut file Arsip\n\
+  S   Atribut file Sistem\n\
+  H   Atribut file Tersembunyi\n\
+  /S  Proses file yang sama dalam direktori dan semua subdirektori\n\
+      saat ini\n\
+  /D  Proses direktori juga\n\n\
+Ketik ATTRIB tanpa parameter untuk menampilkan atribut dari semua file.\n"
+    STRING_CONSOLE_ERROR "Kesalahan tidak dikenal: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Format parameter tidak benar - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/it-IT.rc 
b/base/applications/cmdutils/attrib/lang/it-IT.rc
new file mode 100644
index 00000000000..70d47fc74c4
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/it-IT.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Attiva un attributo\n\
+  -   Toglie un attributo\n\
+  R   Attributo di file di sola lettura\n\
+  A   Attributo di file di archivio\n\
+  S   Attributo di file di sistema\n\
+  H   Attributo di file nascosto\n\
+  /S  Tratta i file indicati nella cartella corrente e in\n\
+       tutte le sottocartelle\n\
+  /D  Tratta anche le cartelle\n\n\
+Scrivi ATTRIB senza parametri per visualizzare gli attributi di tutti i 
file.\n"
+    STRING_CONSOLE_ERROR "Errore sconosciuto: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Formato dei parametri non valido - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/ja-JP.rc 
b/base/applications/cmdutils/attrib/lang/ja-JP.rc
new file mode 100644
index 00000000000..79e2c7652fd
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/ja-JP.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "ファイル属性を表示または変更します。\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [ファイル] ...\n\
+       [/S [/D]]\n\n\
+  +   属性を設定します。\n\
+  -   属性を解除します。\n\
+  R   読みとり専用属性。\n\
+  A   アーカイブ属性。\n\
+  S   システム ファイル属性。\n\
+  H   隠しファイル属性。\n\
+  /S  現在のフォルダとすべてのサブフォルダの一致するファイルを\n\
+      処理します。\n\
+  /D  フォルダも処理します。\n\n\
+パラメータを指定しないで ATTRIB と入力すると、すべてのファイルの属性を表示します。\n"
+    STRING_CONSOLE_ERROR "不明なエラー: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "無効なパラメータの書式です。 - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/no-NO.rc 
b/base/applications/cmdutils/attrib/lang/no-NO.rc
new file mode 100644
index 00000000000..095e18be0b2
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/no-NO.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "Viser eller endrer filattributtene.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
+       [/S [/D]]\n\n\
+  +   Setter et attributt\n\
+  -   Fjerner et attributt\n\
+  R   Attributt: Skrivebeskyttet.\n\
+  A   Attributt: Arkiver.\n\
+  S   Attributt: System.\n\
+  H   Attributt: Skjult.\n\
+  /S  Behandler tilsvarende filer i gjeldende mappe\n\
+      og alle undermapper.\n\
+  /D  Bearbeider også mapper.\n\n\
+Skriv ATTRIB uten parametere for å vise attributtene til alle filer.\n"
+    STRING_CONSOLE_ERROR "Ukjent feil: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Ugyldig parameter format - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/pl-PL.rc 
b/base/applications/cmdutils/attrib/lang/pl-PL.rc
new file mode 100644
index 00000000000..42543e60b3a
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/pl-PL.rc
@@ -0,0 +1,29 @@
+/*
+ *    Translated by Caemyr - Olaf Siejka (Jan, 2008)
+ *    Updated by niski - Maciej Bialas (Mar, 2010)
+ *    Use ReactOS forum PM or IRC to contact me
+ *    http://www.reactos.org
+ *    IRC: irc.freenode.net #reactos-pl;
+ *    UTF-8 conversion by Caemyr (May, 2011)
+ */
+
+LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Ustawia atrybut\n\
+  -   Czyści atrybut\n\
+  R   Atrybut pliku tylko do odczytu\n\
+  A   Atrybut pliku archiwalnego\n\
+  S   Atrybut pliku systemowego\n\
+  H   Atrybut pliku ukrytego\n\
+  /S  Przetwarza wszystkie, pasujące pliki w bieżącym katalogu\n\
+      i we wszystkich podkatalogach\n\
+  /D  Przetwarza również katalogi\n\n\
+Wpisz ATTRIB bez żadnego parametru, by wyświetlić atrybuty wszystkich 
plików.\n"
+    STRING_CONSOLE_ERROR "Nieznany błąd: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Niewłaściwy format parametru - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/ro-RO.rc 
b/base/applications/cmdutils/attrib/lang/ro-RO.rc
new file mode 100644
index 00000000000..73eed7eaf11
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/ro-RO.rc
@@ -0,0 +1,22 @@
+/* Translator: Ștefan Fulea (stefan dot fulea at mail dot com) */
+
+LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Consimte atributul\n\
+  -   Reprobă atributul\n\
+  R   Atributul fișierelor nemodificabile\n\
+  A   Atributul fișierelor arhivabile\n\
+  S   Atributul fișierelor de sistem\n\
+  H   Atributul fișierelor ascunse\n\
+  /S  Aplică și pentru fișierele din subdirectoare\n\
+  /D  Aplică și pentru directoare\n\n\
+Tastați ATTRIB fără argumente pentru afișarea atributelor pentru\n\
+toate fișierele.\n"
+    STRING_CONSOLE_ERROR "Eroare necunoscută: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Formatul argumentului este eronat - 
%s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/ru-RU.rc 
b/base/applications/cmdutils/attrib/lang/ru-RU.rc
new file mode 100644
index 00000000000..8cea9affee4
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/ru-RU.rc
@@ -0,0 +1,22 @@
+/* Russian translation by Andrey Korotaev ([email protected]) & Aleksey Bragin 
([email protected]) & Kudratov Olimjon ([email protected])*/
+
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "Вывод и изменение атрибутов файлов.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
+       [/S [/D]]\n\n\
+  +   Установка атрибута.\n\
+  -   Снятие атрибута.\n\
+  R   Атрибут ""Только чтение"".\n\
+  A   Атрибут ""Архивный"".\n\
+  S   Атрибут ""Системный"".\n\
+  H   Атрибут ""Скрытый"".\n\
+  /S  Обработка файлов с указанными именами в текущей папке\n\
+      и во всех ее подпапках.\n\
+  /D  Обработка и файлов, и папок.\n\n\
+Команда ATTRIB без параметров выводит атрибуты всех файлов.\n"
+    STRING_CONSOLE_ERROR "Неизвестная ошибка: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Неверный формат параметра - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/sk-SK.rc 
b/base/applications/cmdutils/attrib/lang/sk-SK.rc
new file mode 100644
index 00000000000..281a003325b
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/sk-SK.rc
@@ -0,0 +1,26 @@
+/* Slovak translation for CMD
+ * TRANSLATOR: Mário Kačmár /Mario Kacmar/ aka Kario ([email protected])
+ * DATE OF TR: 21-03-2009
+ * LastChange: 10-08-2010
+ */
+
+LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Sets an attribute\n\
+  -   Clears an attribute\n\
+  R   Read-only file attribute\n\
+  A   Archive file attribute\n\
+  S   System file attribute\n\
+  H   Hidden file attribute\n\
+  /S  Processes matching files in the current directory\n\
+      and all subdirectories\n\
+  /D  Processes directories as well\n\n\
+Type ATTRIB without a parameter to display the attributes of all files.\n"
+    STRING_CONSOLE_ERROR "Neznáma chyba: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Invalid parameter format - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/sq-AL.rc 
b/base/applications/cmdutils/attrib/lang/sq-AL.rc
new file mode 100644
index 00000000000..ca39be06934
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/sq-AL.rc
@@ -0,0 +1,24 @@
+/* TRANSLATOR : Ardit Dani (Ard1t) ([email protected]) 
+ * DATE OF TR:  29-11-2013
+*/
+
+LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Vendos nje atribute\n\
+  -   Pastron një atribute\n\
+  R   Lexo-vetem atributet e dokumentave\n\
+  A   Atributet e dokumentave në arkiv\n\
+  S   Atributet e dokumentave të sistemit\n\
+  H   Atributet e dokumentave te fshehur\n\
+  /S  Procesi i përputhjes së dokumentave ne skedën aktuale\n\
+      dhe të gjitha nënskedat\n\
+  /D  Proçeso skedat gjithashtu\n\n\
+Shkruaj ATTRIB pa një parameter për të shfaque atributet e të gjithë 
dokumentave.\n"
+    STRING_CONSOLE_ERROR "Error i paditur: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Parametrat e formatit invalid - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/sv-SE.rc 
b/base/applications/cmdutils/attrib/lang/sv-SE.rc
new file mode 100644
index 00000000000..236baf7c6a2
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/sv-SE.rc
@@ -0,0 +1,20 @@
+LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "Visar eller ändrar filattributen.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] fil ...\n\
+       [/S [/D]]\n\n\
+  +   Sätter ett attribut\n\
+  -   Rensar ett attribut\n\
+  R   Attribut: Skrivskyddad.\n\
+  A   Attribut: Arkiverad.\n\
+  S   Attribut: System.\n\
+  H   Attribut: Dold.\n\
+  /S  Behandlar matchande filer i den aktuella mappen\n\
+      och alla undermappar.\n\
+  /D  Bearbetar även mappar.\n\n\
+Skriv ATTRIB utan parametrar för att visa attributten för alla filer.\n"
+    STRING_CONSOLE_ERROR "Okänt fel: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Ogiltigt parameterformat - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/tr-TR.rc 
b/base/applications/cmdutils/attrib/lang/tr-TR.rc
new file mode 100644
index 00000000000..d96c764e2e6
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/tr-TR.rc
@@ -0,0 +1,22 @@
+/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy [at] erdemersoy [dot] 
net) */
+
+LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    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\
+  +   Bir öz nitelik ayarlar\n\
+  -   Bir öz nitelik siler\n\
+  R   Yalnızca okunur kütük öz niteliği\n\
+  A   Belgelik kütük öz niteliği\n\
+  S   Dizge kütük öz niteliği\n\
+  H   Gizli kütük öz niteliği\n\
+  /S  Şimdiki dizindeki ve tüm alt dizinlerdeki kütükleri eşlemeyi yapar\n\
+  /D  Dizinleri de yap\n\n\
+Tüm kütüklerin öz niteliklerini görüntülemek için bir değişken olmadan 
ATTRIB\n\
+yazınız.\n"
+    STRING_CONSOLE_ERROR "Bilinmeyen yanlışlık: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Geçersiz değişken biçimi - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/uk-UA.rc 
b/base/applications/cmdutils/attrib/lang/uk-UA.rc
new file mode 100644
index 00000000000..6591e433459
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/uk-UA.rc
@@ -0,0 +1,28 @@
+/*
+ * PROJECT:     Command-line interface
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        base/shell/cmd/lang/uk-UA.rc
+ * PURPOSE:     Ukraianian Language File for Command-line interface
+ * TRANSLATORS: Artem Reznikov, Igor Paliychuk
+ */
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "Відображення або зміна атрибутів файлу.\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
+       [/S [/D]]\n\n\
+  +   Встановлення атрибуту\n\
+  -   Зняття атрибуту\n\
+  R   Атрибут файлу ""Лише читання""\n\
+  A   Атрибут файлу ""Архiвний""\n\
+  S   Атрибут файлу ""Системний""\n\
+  H   Атрибут файлу ""Прихований""\n\
+  /S  Обробка файлiв зi вказаними iменами в поточнiй тецi\n\
+      i у всіх її пiдтеках\n\
+  /D  Обробка також i тек\n\n\
+Введiть ATTRIB без параметра, щоб вивести атрибути всiх файлiв.\n"
+    STRING_CONSOLE_ERROR "Невiдома помилка: %d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "Невiрний формат параметра - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/zh-CN.rc 
b/base/applications/cmdutils/attrib/lang/zh-CN.rc
new file mode 100644
index 00000000000..a4d10f23bff
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/zh-CN.rc
@@ -0,0 +1,21 @@
+/* Simplified Chinese translation by Song Fuchang (0xfc) <[email protected]> 
2011 */
+
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "显示或更改文件属性。\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 文件 ...\n\
+       [/S [/D]]\n\n\
+  +   设置一个属性\n\
+  -   清除一个属性\n\
+  R   只读属性\n\
+  A   归档属性\n\
+  S   系统属性\n\
+  H   隐藏属性\n\
+  /S  处理当前目录和所有子目录下的所有匹配文件\n\
+  /D  同时处理目录\n\n\
+执行不带参数的 ATTRIB 将会显示所有文件的属性。\n"
+    STRING_CONSOLE_ERROR "未知错误:%d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "无效的参数格式 - %s\n"
+END
diff --git a/base/applications/cmdutils/attrib/lang/zh-TW.rc 
b/base/applications/cmdutils/attrib/lang/zh-TW.rc
new file mode 100644
index 00000000000..c1fb32005c0
--- /dev/null
+++ b/base/applications/cmdutils/attrib/lang/zh-TW.rc
@@ -0,0 +1,22 @@
+/* Traditional Chinese translation by Henry Tang Ih 2016 
([email protected]) */
+/* Improved by Luo Yufan 2019 <[email protected]> */
+
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
+
+STRINGTABLE
+BEGIN
+    STRING_ATTRIB_HELP "顯示或更改檔案屬性。\n\n\
+ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 檔案 ...\n\
+       [/S [/D]]\n\n\
+  +   設定一個屬性\n\
+  -   清除一個屬性\n\
+  R   只讀屬性\n\
+  A   歸檔屬性\n\
+  S   系統屬性\n\
+  H   隱藏屬性\n\
+  /S  處理當前目錄和所有子目錄下的所有匹配檔案\n\
+  /D  同時處理目錄\n\n\
+執行不帶參數的 ATTRIB 將會顯示所有檔案的屬性。\n"
+    STRING_CONSOLE_ERROR "未知錯誤:%d\n"
+    STRING_ERROR_INVALID_PARAM_FORMAT "無效的參數格式 - %s\n"
+END 
\ No newline at end of file
diff --git a/base/applications/cmdutils/attrib/resource.h 
b/base/applications/cmdutils/attrib/resource.h
new file mode 100644
index 00000000000..3b44432714c
--- /dev/null
+++ b/base/applications/cmdutils/attrib/resource.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#define RC_STRING_MAX_SIZE 3072
+
+#define STRING_ERROR_INVALID_PARAM_FORMAT 107
+#define STRING_CONSOLE_ERROR 316
+#define STRING_ATTRIB_HELP 600
diff --git a/base/shell/cmd/CMakeLists.txt b/base/shell/cmd/CMakeLists.txt
index 351a7e0c930..99fdd19742f 100644
--- a/base/shell/cmd/CMakeLists.txt
+++ b/base/shell/cmd/CMakeLists.txt
@@ -9,7 +9,6 @@ include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/conutils)
 list(APPEND SOURCE
     alias.c
     assoc.c
-    attrib.c
     batch.c
     beep.c
     call.c
diff --git a/base/shell/cmd/attrib.c b/base/shell/cmd/attrib.c
deleted file mode 100644
index dfc0f1aff99..00000000000
--- a/base/shell/cmd/attrib.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- *  ATTRIB.C - attrib internal command.
- *
- *
- *  History:
- *
- *    04-Dec-1998 Eric Kohl
- *        started
- *
- *    09-Dec-1998 Eric Kohl
- *        implementation works, except recursion ("attrib /s").
- *
- *    05-Jan-1999 Eric Kohl
- *        major rewrite.
- *        fixed recursion ("attrib /s").
- *        started directory support ("attrib /s /d").
- *        updated help text.
- *
- *    14-Jan-1999 Eric Kohl
- *        Unicode ready!
- *
- *    19-Jan-1999 Eric Kohl
- *        Redirection ready!
- *
- *    21-Jan-1999 Eric Kohl
- *        Added check for invalid filenames.
- *
- *    23-Jan-1999 Eric Kohl
- *        Added handling of multiple filenames.
- *
- *    02-Apr-2005 (Magnus Olsen <[email protected]>)
- *        Remove all hardcoded strings in En.rc
- */
-
-#include "precomp.h"
-
-#ifdef INCLUDE_CMD_ATTRIB
-
-static VOID
-PrintAttribute (LPTSTR pszPath, LPTSTR pszFile, BOOL bRecurse)
-{
-    WIN32_FIND_DATA findData;
-    HANDLE hFind;
-    TCHAR  szFullName[MAX_PATH];
-    LPTSTR pszFileName;
-
-    /* prepare full file name buffer */
-    _tcscpy (szFullName, pszPath);
-    pszFileName = szFullName + _tcslen (szFullName);
-
-    /* display all subdirectories */
-    if (bRecurse)
-    {
-        /* append file name */
-        _tcscpy (pszFileName, pszFile);
-
-        hFind = FindFirstFile (szFullName, &findData);
-        if (hFind == INVALID_HANDLE_VALUE)
-        {
-            ErrorMessage (GetLastError (), pszFile);
-            return;
-        }
-
-        do
-        {
-            if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
-                continue;
-
-            if (!_tcscmp (findData.cFileName, _T(".")) ||
-                !_tcscmp (findData.cFileName, _T("..")))
-                continue;
-
-            _tcscpy (pszFileName, findData.cFileName);
-            _tcscat (pszFileName, _T("\\"));
-            PrintAttribute (szFullName, pszFile, bRecurse);
-        }
-        while (FindNextFile (hFind, &findData));
-        FindClose (hFind);
-    }
-
-    /* append file name */
-    _tcscpy (pszFileName, pszFile);
-
-    /* display current directory */
-    hFind = FindFirstFile (szFullName, &findData);
-    if (hFind == INVALID_HANDLE_VALUE)
-    {
-        ErrorMessage (GetLastError (), pszFile);
-        return;
-    }
-
-    do
-    {
-        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-            continue;
-
-        _tcscpy (pszFileName, findData.cFileName);
-
-        ConOutPrintf(_T("%c  %c%c%c     %s\n"),
-                     (findData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) ? 
_T('A') : _T(' '),
-                     (findData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) ? 
_T('S') : _T(' '),
-                     (findData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) ? 
_T('H') : _T(' '),
-                     (findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 
_T('R') : _T(' '),
-                     szFullName);
-    }
-    while (FindNextFile(hFind, &findData));
-    FindClose(hFind);
-}
-
-
-static VOID
-ChangeAttribute(LPTSTR pszPath, LPTSTR pszFile, DWORD dwMask,
-                DWORD dwAttrib, BOOL bRecurse, BOOL bDirectories)
-{
-    WIN32_FIND_DATA findData;
-    HANDLE hFind;
-    DWORD  dwAttribute;
-    TCHAR  szFullName[MAX_PATH];
-    LPTSTR pszFileName;
-
-
-    /* prepare full file name buffer */
-    _tcscpy (szFullName, pszPath);
-    pszFileName = szFullName + _tcslen (szFullName);
-
-    /* change all subdirectories */
-    if (bRecurse)
-    {
-        /* append file name */
-        _tcscpy (pszFileName, _T("*.*"));
-
-        hFind = FindFirstFile (szFullName, &findData);
-        if (hFind == INVALID_HANDLE_VALUE)
-        {
-            ErrorMessage (GetLastError (), pszFile);
-      nErrorLevel = 1;
-            return;
-        }
-
-        do
-        {
-            if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-            {
-                if (!_tcscmp (findData.cFileName, _T(".")) ||
-                    !_tcscmp (findData.cFileName, _T("..")))
-                    continue;
-
-                _tcscpy (pszFileName, findData.cFileName);
-                _tcscat (pszFileName, _T("\\"));
-
-                ChangeAttribute (szFullName, pszFile, dwMask,
-                                 dwAttrib, bRecurse, bDirectories);
-            }
-        }
-        while (FindNextFile (hFind, &findData));
-        FindClose (hFind);
-    }
-
-    /* append file name */
-    _tcscpy (pszFileName, pszFile);
-
-    hFind = FindFirstFile (szFullName, &findData);
-    if (hFind == INVALID_HANDLE_VALUE)
-    {
-        ErrorMessage (GetLastError (), pszFile);
-    nErrorLevel = 1;
-        return;
-    }
-
-    do
-    {
-        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-            continue;
-
-        _tcscpy (pszFileName, findData.cFileName);
-
-        dwAttribute = GetFileAttributes (szFullName);
-
-        if (dwAttribute != 0xFFFFFFFF)
-        {
-            dwAttribute = (dwAttribute & ~dwMask) | dwAttrib;
-            SetFileAttributes (szFullName, dwAttribute);
-        }
-    }
-    while (FindNextFile (hFind, &findData));
-    FindClose (hFind);
-}
-
-
-INT CommandAttrib (LPTSTR param)
-{
-    LPTSTR *arg;
-    INT    argc, i;
-    TCHAR  szPath[MAX_PATH];
-    TCHAR  szFileName [MAX_PATH];
-    BOOL   bRecurse = FALSE;
-    BOOL   bDirectories = FALSE;
-    DWORD  dwAttrib = 0;
-    DWORD  dwMask = 0;
-
-    /* initialize strings */
-    szPath[0] = _T('\0');
-    szFileName[0] = _T('\0');
-
-    /* print help */
-    if (!_tcsncmp (param, _T("/?"), 2))
-    {
-        ConOutResPaging(TRUE,STRING_ATTRIB_HELP);
-        return 0;
-    }
-
-    nErrorLevel = 0;
-
-    /* build parameter array */
-    arg = split (param, &argc, FALSE, FALSE);
-
-    /* check for options */
-    for (i = 0; i < argc; i++)
-    {
-        if (_tcsicmp (arg[i], _T("/s")) == 0)
-            bRecurse = TRUE;
-        else if (_tcsicmp (arg[i], _T("/d")) == 0)
-            bDirectories = TRUE;
-    }
-
-    /* create attributes and mask */
-    for (i = 0; i < argc; i++)
-    {
-        if (*arg[i] == _T('+'))
-        {
-            if (_tcslen (arg[i]) != 2)
-            {
-                error_invalid_parameter_format (arg[i]);
-                freep (arg);
-                return -1;
-            }
-
-            switch ((TCHAR)_totupper (arg[i][1]))
-            {
-                case _T('A'):
-                    dwMask   |= FILE_ATTRIBUTE_ARCHIVE;
-                    dwAttrib |= FILE_ATTRIBUTE_ARCHIVE;
-                    break;
-
-                case _T('H'):
-                    dwMask   |= FILE_ATTRIBUTE_HIDDEN;
-                    dwAttrib |= FILE_ATTRIBUTE_HIDDEN;
-                    break;
-
-                case _T('R'):
-                    dwMask   |= FILE_ATTRIBUTE_READONLY;
-                    dwAttrib |= FILE_ATTRIBUTE_READONLY;
-                    break;
-
-                case _T('S'):
-                    dwMask   |= FILE_ATTRIBUTE_SYSTEM;
-                    dwAttrib |= FILE_ATTRIBUTE_SYSTEM;
-                    break;
-
-                default:
-                    error_invalid_parameter_format (arg[i]);
-                    freep (arg);
-                    return -1;
-            }
-        }
-        else if (*arg[i] == _T('-'))
-        {
-            if (_tcslen (arg[i]) != 2)
-            {
-                error_invalid_parameter_format (arg[i]);
-                freep (arg);
-                return -1;
-            }
-
-            switch ((TCHAR)_totupper (arg[i][1]))
-            {
-                case _T('A'):
-                    dwMask   |= FILE_ATTRIBUTE_ARCHIVE;
-                    dwAttrib &= ~FILE_ATTRIBUTE_ARCHIVE;
-                    break;
-
-                case _T('H'):
-                    dwMask   |= FILE_ATTRIBUTE_HIDDEN;
-                    dwAttrib &= ~FILE_ATTRIBUTE_HIDDEN;
-                    break;
-
-                case _T('R'):
-                    dwMask   |= FILE_ATTRIBUTE_READONLY;
-                    dwAttrib &= ~FILE_ATTRIBUTE_READONLY;
-                    break;
-
-                case _T('S'):
-                    dwMask   |= FILE_ATTRIBUTE_SYSTEM;
-                    dwAttrib &= ~FILE_ATTRIBUTE_SYSTEM;
-                    break;
-
-                default:
-                    error_invalid_parameter_format (arg[i]);
-                    freep (arg);
-                    return -1;
-            }
-        }
-    }
-
-    if (argc == 0)
-    {
-        DWORD len;
-
-        len = GetCurrentDirectory (MAX_PATH, szPath);
-        if (szPath[len-1] != _T('\\'))
-        {
-            szPath[len] = _T('\\');
-            szPath[len + 1] = 0;
-        }
-        _tcscpy (szFileName, _T("*.*"));
-        PrintAttribute (szPath, szFileName, bRecurse);
-        freep (arg);
-        return 0;
-    }
-
-    /* get full file name */
-    for (i = 0; i < argc; i++)
-    {
-        if ((*arg[i] != _T('+')) && (*arg[i] != _T('-')) && (*arg[i] != 
_T('/')))
-        {
-            LPTSTR p;
-            GetFullPathName (arg[i], MAX_PATH, szPath, NULL);
-            p = _tcsrchr (szPath, _T('\\')) + 1;
-            _tcscpy (szFileName, p);
-            *p = _T('\0');
-
-            if (dwMask == 0)
-                PrintAttribute (szPath, szFileName, bRecurse);
-            else
-                ChangeAttribute (szPath, szFileName, dwMask,
-                         dwAttrib, bRecurse, bDirectories);
-        }
-    }
-
-    freep (arg);
-    return 0;
-}
-
-#endif /* INCLUDE_CMD_ATTRIB */
diff --git a/base/shell/cmd/cmd.h b/base/shell/cmd/cmd.h
index 69a769ee7c2..2ddafab6a4a 100644
--- a/base/shell/cmd/cmd.h
+++ b/base/shell/cmd/cmd.h
@@ -63,9 +63,6 @@ INT CommandAlias (LPTSTR);
 /* Prototypes for ASSOC.C */
 INT CommandAssoc (LPTSTR);
 
-/* Prototypes for ATTRIB.C */
-INT CommandAttrib (LPTSTR);
-
 /* Prototypes for BEEP.C */
 INT cmd_beep (LPTSTR);
 
diff --git a/base/shell/cmd/cmdtable.c b/base/shell/cmd/cmdtable.c
index 8221f06e32f..20d3f690bb0 100644
--- a/base/shell/cmd/cmdtable.c
+++ b/base/shell/cmd/cmdtable.c
@@ -42,10 +42,6 @@ COMMAND cmds[] =
     {_T("assoc"), 0, CommandAssoc},
 #endif
 
-#ifdef INCLUDE_CMD_ATTRIB
-    {_T("attrib"), 0, CommandAttrib},
-#endif
-
 #ifdef INCLUDE_CMD_BEEP
     {_T("beep"),     0, cmd_beep},
 #endif
diff --git a/base/shell/cmd/config.h b/base/shell/cmd/config.h
index bdeeaa0e04b..90f7b9cbb53 100644
--- a/base/shell/cmd/config.h
+++ b/base/shell/cmd/config.h
@@ -50,7 +50,6 @@
 #define INCLUDE_CMD_ACTIVATE
 #endif
 #define INCLUDE_CMD_ASSOC
-#define INCLUDE_CMD_ATTRIB
 #define INCLUDE_CMD_CHDIR
 #define INCLUDE_CMD_CHOICE
 #define INCLUDE_CMD_CLS
diff --git a/base/shell/cmd/lang/cs-CZ.rc b/base/shell/cmd/lang/cs-CZ.rc
index a4e8aaa2e6e..4910facf73c 100644
--- a/base/shell/cmd/lang/cs-CZ.rc
+++ b/base/shell/cmd/lang/cs-CZ.rc
@@ -14,19 +14,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Sets an attribute\n\
-  -   Clears an attribute\n\
-  R   Read-only file attribute\n\
-  A   Archive file attribute\n\
-  S   System file attribute\n\
-  H   Hidden file attribute\n\
-  /S  Processes matching files in the current directory\n\
-      and all subdirectories\n\
-  /D  Processes directories as well\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
     STRING_ALIAS_HELP "Sets, removes or shows aliases.\n\n\
 ALIAS [alias=[command]]\n\n\
   alias    Name for an alias.\n\
diff --git a/base/shell/cmd/lang/de-DE.rc b/base/shell/cmd/lang/de-DE.rc
index 52ff6829c7e..078cb1ba32b 100644
--- a/base/shell/cmd/lang/de-DE.rc
+++ b/base/shell/cmd/lang/de-DE.rc
@@ -11,19 +11,6 @@ assoc (Gibt alle Zuordnungen aus)\n\
 assoc .erw (Gibt die spezifische Zuordnung aus)\n\
 assoc .erw= (Löscht die spezifische Zuordnung)\n\
 assoc .erw=Dateityp (Fügt neue Zuordnung hinzu)\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\
-  +   Setzt ein Attribut\n\
-  -   Löscht ein Attribut\n\
-  R   Attribut für 'schreibgeschützte Datei'\n\
-  A   Attribut für 'zu archivierende Datei'\n\
-  S   Attribut für 'Systemdatei'\n\
-  H   Attribut für 'versteckte Datei'\n\
- /S   Verarbeitet übereinstimmende Dateien im aktuellen Ordner\n\
-      und in allen Unterordnern.\n\
-  /D  Verarbeitet auch die Ordner.\n\n\
-ATTRIB ohne Parameter zeigt die derzeit gesetzten Attribute aller Dateien an."
     STRING_ALIAS_HELP "Setzt, löscht oder zeigt ein Alias.\n\n\
 ALIAS [Alias=[Befehl]]\n\n\
   Alias    Name des Alias.\n\
diff --git a/base/shell/cmd/lang/el-GR.rc b/base/shell/cmd/lang/el-GR.rc
index 92c45eac27c..fab27d826c3 100644
--- a/base/shell/cmd/lang/el-GR.rc
+++ b/base/shell/cmd/lang/el-GR.rc
@@ -14,19 +14,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\n"
-    STRING_ATTRIB_HELP "Προβολή ή αλλαγή των χαρακτηριστικών των αρχείων.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] file ...\n\
-       [/S [/D]]\n\n\
-  +   Ορισμός ενός χαρακτηριστικού.\n\
-  -   Απαλοιφή ενός χαρακτηριστικού.\n\
-  R   Χαρακτηριστικό αρχείου μόνο για ανάγνωση.\n\
-  A   Χαρακτηριστικό φύλαξης αρχείου.\n\
-  S   Χαρακτηριστικό αρχείου συστήματος.\n\
-  H   Χαρακτηριστικό κρυφού αρχείου.\n\
-  /S  Επεξεργασία των αρχείων που ταιριάζουν στον τρέχοντα κατάλογο\n\
-      και σε όλους τους υποκαταλόγους.\n\
-  /D  Επεξεργασία καταλόγων επίσης.\n\n\
-Πληκτρολογήστε ATTRIB χωρίς παράμετρο, για να εμφανιστούν τα χαρακτηριστικά 
όλων των αρχείων.\n"
     STRING_ALIAS_HELP "Θέτει,αφαιρεί ή εμφανίζει τα aliases.\n\n\
 ALIAS [alias=[εντολή]]\n\n\
   alias    Όνομα για το alias.\n\
diff --git a/base/shell/cmd/lang/en-US.rc b/base/shell/cmd/lang/en-US.rc
index 41f73af9a31..e0324bb8744 100644
--- a/base/shell/cmd/lang/en-US.rc
+++ b/base/shell/cmd/lang/en-US.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Sets an attribute\n\
-  -   Clears an attribute\n\
-  R   Read-only file attribute\n\
-  A   Archive file attribute\n\
-  S   System file attribute\n\
-  H   Hidden file attribute\n\
-  /S  Processes matching files in the current directory\n\
-      and all subdirectories\n\
-  /D  Processes directories as well\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
     STRING_ALIAS_HELP "Sets, removes or shows aliases.\n\n\
 ALIAS [alias=[command]]\n\n\
   alias    Name for an alias.\n\
diff --git a/base/shell/cmd/lang/es-ES.rc b/base/shell/cmd/lang/es-ES.rc
index d2767a4b254..2ca450e2436 100644
--- a/base/shell/cmd/lang/es-ES.rc
+++ b/base/shell/cmd/lang/es-ES.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Añade un atributo\n\
-  -   Borra un atributo\n\
-  R   Atributo de sólo lectura\n\
-  A   Atributo de archivo\n\
-  S   Atributo de archivo de sistema\n\
-  H   Atributo de archivo oculto\n\
-  /S  Procesa los archivos coincidentes en el directorio actual \n\
-      y sus subdirectorios\n\
-  /D  Procesa también los directorios\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
     STRING_ALIAS_HELP "Pone, borra o muestra los alias.\n\n\
 ALIAS [alias=[command]]\n\n\
   alias    Nombre para un alias.\n\
diff --git a/base/shell/cmd/lang/fr-FR.rc b/base/shell/cmd/lang/fr-FR.rc
index 84b0c5ba837..09799ca373d 100644
--- a/base/shell/cmd/lang/fr-FR.rc
+++ b/base/shell/cmd/lang/fr-FR.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Positionne un attribut\n\
-  -   Enlève un attribut\n\
-  R   Fichier en lecture seule\n\
-  A   Fichier archive\n\
-  S   Fichier système\n\
-  H   Fichier caché\n\
-  /S  Traite les fichiers correspondants dans le répertoire courant\n\
-        et tous les sous-répertoires\n\
-  /D  Traite également les répertoires\n\n\
-Taper ATTRIB sans paramètre pour afficher les attributs de tous les fichiers."
     STRING_ALIAS_HELP "Positionne, enlève ou affiche les alias.\n\n\
 ALIAS [alias=[commande]]\n\n\
   alias     Nom de l'alias.\n\
diff --git a/base/shell/cmd/lang/hu-HU.rc b/base/shell/cmd/lang/hu-HU.rc
index 8b91ff129e7..b984b99262c 100644
--- a/base/shell/cmd/lang/hu-HU.rc
+++ b/base/shell/cmd/lang/hu-HU.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   bekapcsol egy attribútumot\n\
-  -   kikapcsol egy attribútumot\n\
-  R   Írásvédett állomány\n\
-  A   Archiválandó állomány\n\
-  S   Rendszer állomány\n\
-  H   Rejtett állomány\n\
-  /S  Minden állomány módosítása a mappában és minden\n\
-      almappábanban\n\
-  /D  Mappákra is érvényesíti\n\n\
-Ha ATTRIB-ot paraméter nélkül írod be, megjeleníti a mappában található összes 
állományt és annak attribútumát.\n"
     STRING_ALIAS_HELP "Aliasok megjelenítése, hozzáadása és törlése\n\n\
 ALIAS [alias=[parancs]]\n\n\
   alias    Alias neve.\n\
diff --git a/base/shell/cmd/lang/id-ID.rc b/base/shell/cmd/lang/id-ID.rc
index 58cc0a98cea..ffb62a078bd 100644
--- a/base/shell/cmd/lang/id-ID.rc
+++ b/base/shell/cmd/lang/id-ID.rc
@@ -11,19 +11,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Menyetel atribut\n\
-  -   Membersihkan atribut\n\
-  R   Atribut file Hanya-baca\n\
-  A   Atribut file Arsip\n\
-  S   Atribut file Sistem\n\
-  H   Atribut file Tersembunyi\n\
-  /S  Proses file yang sama dalam direktori dan semua subdirektori\n\
-      saat ini\n\
-  /D  Proses direktori juga\n\n\
-Ketik ATTRIB tanpa parameter untuk menampilkan atribut dari semua file.\n"
     STRING_ALIAS_HELP "Menyetel, menghapus atau menampilkan alias.\n\n\
 ALIAS [alias=[command]]\n\n\
   alias    Nama untuk alias.\n\
diff --git a/base/shell/cmd/lang/it-IT.rc b/base/shell/cmd/lang/it-IT.rc
index 3677926a691..16b8cb84b55 100644
--- a/base/shell/cmd/lang/it-IT.rc
+++ b/base/shell/cmd/lang/it-IT.rc
@@ -9,19 +9,6 @@ assoc (mostra tutte le associazioni)\n\
 assoc .ext (mostra una specifica associazione)\n\
 assoc .ext= (rimuove una specifica associazione)\n\
 assoc .ext=FileType (aggiung una associazione)\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\
-  +   Attiva un attributo\n\
-  -   Toglie un attributo\n\
-  R   Attributo di file di sola lettura\n\
-  A   Attributo di file di archivio\n\
-  S   Attributo di file di sistema\n\
-  H   Attributo di file nascosto\n\
-  /S  Tratta i file indicati nella cartella corrente e in\n\
-       tutte le sottocartelle\n\
-  /D  Tratta anche le cartelle\n\n\
-Scrivi ATTRIB senza parametri per visualizzare gli attributi di tutti i 
file.\n"
     STRING_ALIAS_HELP "Attiva, toglie o visualizza gli alias.\n\n\
 ALIAS [alias=[comando]]\n\n\
   alias    Nome dell'alias.\n\
diff --git a/base/shell/cmd/lang/ja-JP.rc b/base/shell/cmd/lang/ja-JP.rc
index 0064cccdb2a..16885267eab 100644
--- a/base/shell/cmd/lang/ja-JP.rc
+++ b/base/shell/cmd/lang/ja-JP.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\n"
-    STRING_ATTRIB_HELP "ファイル属性を表示または変更します。\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] [ファイル] ...\n\
-       [/S [/D]]\n\n\
-  +   属性を設定します。\n\
-  -   属性を解除します。\n\
-  R   読みとり専用属性。\n\
-  A   アーカイブ属性。\n\
-  S   システム ファイル属性。\n\
-  H   隠しファイル属性。\n\
-  /S  現在のフォルダとすべてのサブフォルダの一致するファイルを\n\
-      処理します。\n\
-  /D  フォルダも処理します。\n\n\
-パラメータを指定しないで ATTRIB と入力すると、すべてのファイルの属性を表示します。\n"
     STRING_ALIAS_HELP "エイリアスの設定や解除をしたり、エイリアスを表示したりします。\n\n\
 ALIAS [エイリアス=[コマンド]]\n\n\
   エイリアス   エイリアスとしてつける名前。\n\
diff --git a/base/shell/cmd/lang/no-NO.rc b/base/shell/cmd/lang/no-NO.rc
index 09d284a6bb9..2d8f2930113 100644
--- a/base/shell/cmd/lang/no-NO.rc
+++ b/base/shell/cmd/lang/no-NO.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Setter et attributt\n\
-  -   Fjerner et attributt\n\
-  R   Attributt: Skrivebeskyttet.\n\
-  A   Attributt: Arkiver.\n\
-  S   Attributt: System.\n\
-  H   Attributt: Skjult.\n\
-  /S  Behandler tilsvarende filer i gjeldende mappe\n\
-      og alle undermapper.\n\
-  /D  Bearbeider også mapper.\n\n\
-Skriv ATTRIB uten parametere for å vise attributtene til alle filer.\n"
     STRING_ALIAS_HELP "Setter, fjerner eller viser alias.\n\n\
 ALIAS [alias=[Kommando]]\n\n\
   alias    Navn for et alias.\n\
diff --git a/base/shell/cmd/lang/pl-PL.rc b/base/shell/cmd/lang/pl-PL.rc
index e9f2d431d57..1e56fe86c69 100644
--- a/base/shell/cmd/lang/pl-PL.rc
+++ b/base/shell/cmd/lang/pl-PL.rc
@@ -18,19 +18,6 @@ assoc (wyświetla wszystkie skojarzenia)\n\
 assoc .ext (wyświetla określone skojarzenie)\n\
 assoc .ext= (usuwa określone skojarzenie)\n\
 assoc .ext=typPliku (dodaje nowe skojarzenie)\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\
-  +   Ustawia atrybut\n\
-  -   Czyści atrybut\n\
-  R   Atrybut pliku tylko do odczytu\n\
-  A   Atrybut pliku archiwalnego\n\
-  S   Atrybut pliku systemowego\n\
-  H   Atrybut pliku ukrytego\n\
-  /S  Przetwarza wszystkie, pasujące pliki w bieżącym katalogu\n\
-      i we wszystkich podkatalogach\n\
-  /D  Przetwarza również katalogi\n\n\
-Wpisz ATTRIB bez żadnego parametru, by wyświetlić atrybuty wszystkich 
plików.\n"
     STRING_ALIAS_HELP "Ustawia, usuwa, a także wyświetla aliasy.\n\n\
 ALIAS [nazwa=[tekst]]\n\n\
   nazwa   Nazwa aliasu.\n\
diff --git a/base/shell/cmd/lang/ro-RO.rc b/base/shell/cmd/lang/ro-RO.rc
index c6c94bd5b01..3c83bbc2a2d 100644
--- a/base/shell/cmd/lang/ro-RO.rc
+++ b/base/shell/cmd/lang/ro-RO.rc
@@ -11,19 +11,6 @@ assoc (afișează toate asocierile)\n\
 assoc .ext (afișează o anumită asociere)\n\
 assoc .ext= (elimină o anumită asociere)\n\
 assoc .ext=tip_fișier (adaugă o nouă asociere)\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\
-  +   Consimte atributul\n\
-  -   Reprobă atributul\n\
-  R   Atributul fișierelor nemodificabile\n\
-  A   Atributul fișierelor arhivabile\n\
-  S   Atributul fișierelor de sistem\n\
-  H   Atributul fișierelor ascunse\n\
-  /S  Aplică și pentru fișierele din subdirectoare\n\
-  /D  Aplică și pentru directoare\n\n\
-Tastați ATTRIB fără argumente pentru afișarea atributelor pentru\n\
-toate fișierele.\n"
     STRING_ALIAS_HELP "Instituie, destituie sau afișează alias.\n\n\
 ALIAS [alias=[comandă]]\n\n\
   alias    Numele pentru alias.\n\
diff --git a/base/shell/cmd/lang/ru-RU.rc b/base/shell/cmd/lang/ru-RU.rc
index 00b83490228..bffa1f14800 100644
--- a/base/shell/cmd/lang/ru-RU.rc
+++ b/base/shell/cmd/lang/ru-RU.rc
@@ -11,19 +11,6 @@ assoc (вывести все ассоциации)\n\
 assoc .ext (вывести выбранную ассоциацию)\n\
 assoc .ext= (удалить ассоциацию)\n\
 assoc .ext=FileType (добавить ассоциацию)\n"
-    STRING_ATTRIB_HELP "Вывод и изменение атрибутов файлов.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
-       [/S [/D]]\n\n\
-  +   Установка атрибута.\n\
-  -   Снятие атрибута.\n\
-  R   Атрибут ""Только чтение"".\n\
-  A   Атрибут ""Архивный"".\n\
-  S   Атрибут ""Системный"".\n\
-  H   Атрибут ""Скрытый"".\n\
-  /S  Обработка файлов с указанными именами в текущей папке\n\
-      и во всех ее подпапках.\n\
-  /D  Обработка и файлов, и папок.\n\n\
-Команда ATTRIB без параметров выводит атрибуты всех файлов.\n"
     STRING_ALIAS_HELP "Вывод, установка или удаление псевдонимов.\n\n\
 ALIAS [псевдоним=[команда]]\n\n\
   псевдоним    Наименование псевдонима.\n\
diff --git a/base/shell/cmd/lang/sk-SK.rc b/base/shell/cmd/lang/sk-SK.rc
index affef298ced..641709f900d 100644
--- a/base/shell/cmd/lang/sk-SK.rc
+++ b/base/shell/cmd/lang/sk-SK.rc
@@ -15,19 +15,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Sets an attribute\n\
-  -   Clears an attribute\n\
-  R   Read-only file attribute\n\
-  A   Archive file attribute\n\
-  S   System file attribute\n\
-  H   Hidden file attribute\n\
-  /S  Processes matching files in the current directory\n\
-      and all subdirectories\n\
-  /D  Processes directories as well\n\n\
-Type ATTRIB without a parameter to display the attributes of all files.\n"
     STRING_ALIAS_HELP "Sets, removes or shows aliases.\n\n\
 ALIAS [alias=[command]]\n\n\
   alias    Name for an alias.\n\
diff --git a/base/shell/cmd/lang/sq-AL.rc b/base/shell/cmd/lang/sq-AL.rc
index 9228fa8664b..38fc7c71173 100644
--- a/base/shell/cmd/lang/sq-AL.rc
+++ b/base/shell/cmd/lang/sq-AL.rc
@@ -13,19 +13,6 @@ assoc (shfaq të gjith asociacionet)\n\
 assoc .ext (shfaq asociacionet specifike)\n\
 assoc .ext= (hiq acosiacionet specifike)\n\
 assoc .ext=FileType (shto asociacione te reja)\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\
-  +   Vendos nje atribute\n\
-  -   Pastron një atribute\n\
-  R   Lexo-vetem atributet e dokumentave\n\
-  A   Atributet e dokumentave në arkiv\n\
-  S   Atributet e dokumentave të sistemit\n\
-  H   Atributet e dokumentave te fshehur\n\
-  /S  Procesi i përputhjes së dokumentave ne skedën aktuale\n\
-      dhe të gjitha nënskedat\n\
-  /D  Proçeso skedat gjithashtu\n\n\
-Shkruaj ATTRIB pa një parameter për të shfaque atributet e të gjithë 
dokumentave.\n"
     STRING_ALIAS_HELP "Vëndos, hew ose shfaq pseudonimin.\n\n\
 ALIAS [alias=[Komande]]\n\n\
   alias    Emri i pseudonimit.\n\
diff --git a/base/shell/cmd/lang/sv-SE.rc b/base/shell/cmd/lang/sv-SE.rc
index 3fde66adebb..ea59758eb0a 100644
--- a/base/shell/cmd/lang/sv-SE.rc
+++ b/base/shell/cmd/lang/sv-SE.rc
@@ -9,19 +9,6 @@ assoc (print all associations)\n\
 assoc .ext (print specific association)\n\
 assoc .ext= (remove specific association)\n\
 assoc .ext=FileType (add new association)\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\
-  +   Sätter ett attribut\n\
-  -   Rensar ett attribut\n\
-  R   Attribut: Skrivskyddad.\n\
-  A   Attribut: Arkiverad.\n\
-  S   Attribut: System.\n\
-  H   Attribut: Dold.\n\
-  /S  Behandlar matchande filer i den aktuella mappen\n\
-      och alla undermappar.\n\
-  /D  Bearbetar även mappar.\n\n\
-Skriv ATTRIB utan parametrar för att visa attributten för alla filer.\n"
     STRING_ALIAS_HELP "Sätter, tar bort eller visar alias.\n\n\
 ALIAS [alias=[Kommando]]\n\n\
   alias     Namn på ett alias.\n\
diff --git a/base/shell/cmd/lang/tr-TR.rc b/base/shell/cmd/lang/tr-TR.rc
index aa37078bbaf..be6104a3e11 100644
--- a/base/shell/cmd/lang/tr-TR.rc
+++ b/base/shell/cmd/lang/tr-TR.rc
@@ -11,19 +11,6 @@ assoc (tüm ilişkilendirmeleri yazdır)\n\
 assoc .uzn (belirtilen ilişkilendirmeyi yazdır)\n\
 assoc .uzn= (belirtilen ilişkilendirmeyi sil)\n\
 assoc .uzn=Kütük Türü (yeni ilişkilendirme ekle)\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\
-  +   Bir öz nitelik ayarlar\n\
-  -   Bir öz nitelik siler\n\
-  R   Yalnızca okunur kütük öz niteliği\n\
-  A   Belgelik kütük öz niteliği\n\
-  S   Dizge kütük öz niteliği\n\
-  H   Gizli kütük öz niteliği\n\
-  /S  Şimdiki dizindeki ve tüm alt dizinlerdeki kütükleri eşlemeyi yapar\n\
-  /D  Dizinleri de yap\n\n\
-Tüm kütüklerin öz niteliklerini görüntülemek için bir değişken olmadan 
ATTRIB\n\
-yazınız.\n"
     STRING_ALIAS_HELP "Başka adları ayarlar, siler ya da gösterir.\n\n\
 ALIAS [başka ad=[komut]]\n\n\
   başka ad Bir başka ad için ad.\n\
diff --git a/base/shell/cmd/lang/uk-UA.rc b/base/shell/cmd/lang/uk-UA.rc
index db311b8633a..91054347780 100644
--- a/base/shell/cmd/lang/uk-UA.rc
+++ b/base/shell/cmd/lang/uk-UA.rc
@@ -17,19 +17,6 @@ assoc (друк всiх асоцiацiй)\n\
 assoc .рош (друк вiдповiдної асоцiацiї)\n\
 assoc .рош= (видалення вiдповiдної асоцiацiї)\n\
 assoc .рош=ФайлТип (додати нову асоцiацiю)\n"
-    STRING_ATTRIB_HELP "Відображення або зміна атрибутів файлу.\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] файл ...\n\
-       [/S [/D]]\n\n\
-  +   Встановлення атрибуту\n\
-  -   Зняття атрибуту\n\
-  R   Атрибут файлу ""Лише читання""\n\
-  A   Атрибут файлу ""Архiвний""\n\
-  S   Атрибут файлу ""Системний""\n\
-  H   Атрибут файлу ""Прихований""\n\
-  /S  Обробка файлiв зi вказаними iменами в поточнiй тецi\n\
-      i у всіх її пiдтеках\n\
-  /D  Обробка також i тек\n\n\
-Введiть ATTRIB без параметра, щоб вивести атрибути всiх файлiв.\n"
     STRING_ALIAS_HELP "Встановлення, видалення або показ псевдонiмiв.\n\n\
 ALIAS [псевдонiм=[команда]]\n\n\
   псевдонiм    Iм'я псевдонiма.\n\
diff --git a/base/shell/cmd/lang/zh-CN.rc b/base/shell/cmd/lang/zh-CN.rc
index 3d2a62b254b..0ce1b121baa 100644
--- a/base/shell/cmd/lang/zh-CN.rc
+++ b/base/shell/cmd/lang/zh-CN.rc
@@ -11,18 +11,6 @@ assoc (输出所有文件关联)\n\
 assoc .ext (输出指定的文件关联)\n\
 assoc .ext= (删除指定的文件关联)\n\
 assoc .ext=文件类型 (添加新的文件关联)\n"
-    STRING_ATTRIB_HELP "显示或更改文件属性。\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 文件 ...\n\
-       [/S [/D]]\n\n\
-  +   设置一个属性\n\
-  -   清除一个属性\n\
-  R   只读属性\n\
-  A   归档属性\n\
-  S   系统属性\n\
-  H   隐藏属性\n\
-  /S  处理当前目录和所有子目录下的所有匹配文件\n\
-  /D  同时处理目录\n\n\
-执行不带参数的 ATTRIB 将会显示所有文件的属性。\n"
     STRING_ALIAS_HELP "设置、删除或显示别名。\n\n\
 ALIAS [别名=[命令]]\n\n\
   别名    别名的名称。\n\
diff --git a/base/shell/cmd/lang/zh-TW.rc b/base/shell/cmd/lang/zh-TW.rc
index 718affebf08..7a76081e272 100644
--- a/base/shell/cmd/lang/zh-TW.rc
+++ b/base/shell/cmd/lang/zh-TW.rc
@@ -12,18 +12,6 @@ assoc (輸出所有檔案關聯)\n\
 assoc .ext (輸出指定的檔案關聯)\n\
 assoc .ext= (刪除指定的檔案關聯)\n\
 assoc .ext=檔案類型 (添加新的檔案關聯)\n"
-    STRING_ATTRIB_HELP "顯示或更改檔案屬性。\n\n\
-ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] 檔案 ...\n\
-       [/S [/D]]\n\n\
-  +   設定一個屬性\n\
-  -   清除一個屬性\n\
-  R   只讀屬性\n\
-  A   歸檔屬性\n\
-  S   系統屬性\n\
-  H   隱藏屬性\n\
-  /S  處理當前目錄和所有子目錄下的所有匹配檔案\n\
-  /D  同時處理目錄\n\n\
-執行不帶參數的 ATTRIB 將會顯示所有檔案的屬性。\n"
     STRING_ALIAS_HELP "設定、刪除或顯示別名。\n\n\
 ALIAS [別名=[命令]]\n\n\
   別名    別名的名稱。\n\
diff --git a/base/shell/cmd/resource.h b/base/shell/cmd/resource.h
index 839787712d2..ff914ba1ddc 100644
--- a/base/shell/cmd/resource.h
+++ b/base/shell/cmd/resource.h
@@ -66,7 +66,6 @@
 #define STRING_REPLACE_ERROR7      357
 #define STRING_ASSOC_ERROR         358
 
-#define STRING_ATTRIB_HELP 600
 #define STRING_ALIAS_HELP  601
 #define STRING_BEEP_HELP   602
 #define STRING_CALL_HELP   603

Reply via email to