Index: Library/UefiShellLevel2CommandsLib/Cd.c
===================================================================
--- Library/UefiShellLevel2CommandsLib/Cd.c	(revision 16114)
+++ Library/UefiShellLevel2CommandsLib/Cd.c	(working copy)
@@ -38,6 +38,7 @@
   SHELL_FILE_HANDLE Handle;
   CONST CHAR16      *Param1;
   CHAR16            *Param1Copy;
+  CHAR16*           Walker;
 
   ProblemParam = NULL;
   ShellStatus = SHELL_SUCCESS;
@@ -96,6 +97,12 @@
       }
     } else {
       Param1Copy = CatSPrint(NULL, L"%s", Param1, NULL);
+      for (Walker = Param1Copy; Walker != NULL && *Walker != CHAR_NULL ; Walker++) {
+        if (*Walker == L'\"') {
+          CopyMem(Walker, Walker+1, StrSize(Walker) - sizeof(Walker[0]));
+        }
+      }
+      
       if (Param1Copy != NULL) {
         Param1Copy = PathCleanUpDirectories(Param1Copy);
       }
Index: Library/UefiShellLevel2CommandsLib/Cp.c
===================================================================
--- Library/UefiShellLevel2CommandsLib/Cp.c	(revision 16114)
+++ Library/UefiShellLevel2CommandsLib/Cp.c	(working copy)
@@ -300,6 +300,8 @@
   UINTN                     PathSize;
   CONST CHAR16              *Cwd;
   UINTN                     NewSize;
+  CHAR16                    *Walker;
+  CHAR16                    *CleanFilePathStr;
 
   if (Resp == NULL) {
     Response = NULL;
@@ -315,14 +317,25 @@
   ASSERT(FileList != NULL);
   ASSERT(DestDir  != NULL);
 
+  CleanFilePathStr = AllocateCopyPool (StrSize (DestDir), DestDir);
+  if (CleanFilePathStr == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+
+  for (Walker = CleanFilePathStr; Walker != NULL && *Walker != CHAR_NULL ; Walker++) {
+    if (*Walker == L'\"') {
+      CopyMem(Walker, Walker+1, StrSize(Walker) - sizeof(Walker[0]));
+    }
+  }
+
   //
   // If we are trying to copy multiple files... make sure we got a directory for the target...
   //
-  if (EFI_ERROR(ShellIsDirectory(DestDir)) && FileList->Link.ForwardLink != FileList->Link.BackLink) {
+  if (EFI_ERROR(ShellIsDirectory(CleanFilePathStr)) && FileList->Link.ForwardLink != FileList->Link.BackLink) {
     //
     // Error for destination not a directory
     //
-    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, DestDir);
+    ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, CleanFilePathStr);
     return (SHELL_INVALID_PARAMETER);
   }
   for (Node = (EFI_SHELL_FILE_INFO *)GetFirstNode(&FileList->Link)
@@ -336,7 +349,7 @@
       continue;
     }
 
-    NewSize =  StrSize(DestDir);
+    NewSize =  StrSize(CleanFilePathStr);
     NewSize += StrSize(Node->FullName);
     NewSize += (Cwd == NULL)? 0 : StrSize(Cwd);
     if (NewSize > PathSize) {
@@ -354,11 +367,11 @@
     //
     // make sure got dest as dir if needed
     //
-    if (!EFI_ERROR(ShellIsDirectory(Node->FullName)) && EFI_ERROR(ShellIsDirectory(DestDir))) {
+    if (!EFI_ERROR(ShellIsDirectory(Node->FullName)) && EFI_ERROR(ShellIsDirectory(CleanFilePathStr))) {
       //
       // Error for destination not a directory
       //
-      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, DestDir);
+      ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NOT_DIR), gShellLevel2HiiHandle, CleanFilePathStr);
       return (SHELL_INVALID_PARAMETER);
     }
   }
@@ -395,9 +408,9 @@
     }
 
     if (FileList->Link.ForwardLink == FileList->Link.BackLink // 1 item
-      && EFI_ERROR(ShellIsDirectory(DestDir))                 // not an existing directory
+      && EFI_ERROR(ShellIsDirectory(CleanFilePathStr))                 // not an existing directory
       ) {
-      if (StrStr(DestDir, L":") == NULL) {
+      if (StrStr(CleanFilePathStr, L":") == NULL) {
         //
         // simple copy of a single file
         //
@@ -404,17 +417,18 @@
         if (Cwd != NULL) {
           StrnCpy(DestPath, Cwd, PathSize/sizeof(CHAR16)-1);
         } else {
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, DestDir);
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, CleanFilePathStr);
+          FreePool (CleanFilePathStr);
           return (SHELL_INVALID_PARAMETER);
         }
-        if (DestPath[StrLen(DestPath)-1] != L'\\' && DestDir[0] != L'\\') {
+        if (DestPath[StrLen(DestPath)-1] != L'\\' && CleanFilePathStr[0] != L'\\') {
           StrnCat(DestPath, L"\\", PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
-        } else if (DestPath[StrLen(DestPath)-1] == L'\\' && DestDir[0] == L'\\') {
+        } else if (DestPath[StrLen(DestPath)-1] == L'\\' && CleanFilePathStr[0] == L'\\') {
           ((CHAR16*)DestPath)[StrLen(DestPath)-1] = CHAR_NULL;
         }
-        StrnCat(DestPath, DestDir, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
+        StrnCat(DestPath, CleanFilePathStr, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
       } else {
-        StrnCpy(DestPath, DestDir, PathSize/sizeof(CHAR16) -1);
+        StrnCpy(DestPath, CleanFilePathStr, PathSize/sizeof(CHAR16) -1);
       }
     } else {
       //
@@ -424,7 +438,7 @@
       //
       // Check for leading slash
       //
-      if (DestDir[0] == L'\\') {
+      if (CleanFilePathStr[0] == L'\\') {
          //
          // Copy to the root of CWD
          //
@@ -431,43 +445,45 @@
         if (Cwd != NULL) {
           StrnCpy(DestPath, Cwd, PathSize/sizeof(CHAR16) -1);
         } else {
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, DestDir);
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, CleanFilePathStr);
+          FreePool(CleanFilePathStr);
           return (SHELL_INVALID_PARAMETER);
         }
         while (PathRemoveLastItem(DestPath));
-        StrnCat(DestPath, DestDir+1, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
+        StrnCat(DestPath, CleanFilePathStr+1, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
         StrnCat(DestPath, Node->FileName, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
-      } else if (StrStr(DestDir, L":") == NULL) {
+      } else if (StrStr(CleanFilePathStr, L":") == NULL) {
         if (Cwd != NULL) {
           StrnCpy(DestPath, Cwd, PathSize/sizeof(CHAR16) -1);
         } else {
-          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, DestDir);
+          ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_DIR_NF), gShellLevel2HiiHandle, CleanFilePathStr);
+          FreePool(CleanFilePathStr);
           return (SHELL_INVALID_PARAMETER);
         }
-        if (DestPath[StrLen(DestPath)-1] != L'\\' && DestDir[0] != L'\\') {
+        if (DestPath[StrLen(DestPath)-1] != L'\\' && CleanFilePathStr[0] != L'\\') {
           StrnCat(DestPath, L"\\", PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
-        } else if (DestPath[StrLen(DestPath)-1] == L'\\' && DestDir[0] == L'\\') {
+        } else if (DestPath[StrLen(DestPath)-1] == L'\\' && CleanFilePathStr[0] == L'\\') {
           ((CHAR16*)DestPath)[StrLen(DestPath)-1] = CHAR_NULL;
         }
-        StrnCat(DestPath, DestDir, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
-        if (DestDir[StrLen(DestDir)-1] != L'\\' && Node->FileName[0] != L'\\') {
+        StrnCat(DestPath, CleanFilePathStr, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
+        if (CleanFilePathStr[StrLen(CleanFilePathStr)-1] != L'\\' && Node->FileName[0] != L'\\') {
           StrnCat(DestPath, L"\\", PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
-        } else if (DestDir[StrLen(DestDir)-1] == L'\\' && Node->FileName[0] == L'\\') {
+        } else if (CleanFilePathStr[StrLen(CleanFilePathStr)-1] == L'\\' && Node->FileName[0] == L'\\') {
           ((CHAR16*)DestPath)[StrLen(DestPath)-1] = CHAR_NULL;
         }
         StrnCat(DestPath, Node->FileName, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
 
       } else {
-        StrnCpy(DestPath, DestDir, PathSize/sizeof(CHAR16) -1);
-        if (DestDir[StrLen(DestDir)-1] != L'\\' && Node->FileName[0] != L'\\') {
+        StrnCpy(DestPath, CleanFilePathStr, PathSize/sizeof(CHAR16) -1);
+        if (CleanFilePathStr[StrLen(CleanFilePathStr)-1] != L'\\' && Node->FileName[0] != L'\\') {
           StrnCat(DestPath, L"\\", PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
-        } else if (DestDir[StrLen(DestDir)-1] == L'\\' && Node->FileName[0] == L'\\') {
-          ((CHAR16*)DestDir)[StrLen(DestDir)-1] = CHAR_NULL;
+        } else if (CleanFilePathStr[StrLen(CleanFilePathStr)-1] == L'\\' && Node->FileName[0] == L'\\') {
+          ((CHAR16*)CleanFilePathStr)[StrLen(CleanFilePathStr)-1] = CHAR_NULL;
         }
         StrnCat(DestPath, Node->FileName, PathSize/sizeof(CHAR16) - StrLen(DestPath) -1);
       }
     }
-
+    FreePool (CleanFilePathStr);
     //
     // Make sure the path exists
     //
Index: Library/UefiShellLevel2CommandsLib/Mv.c
===================================================================
--- Library/UefiShellLevel2CommandsLib/Mv.c	(revision 16114)
+++ Library/UefiShellLevel2CommandsLib/Mv.c	(working copy)
@@ -270,6 +270,8 @@
   UINTN                     Length;
   VOID                      *Response;
   SHELL_FILE_HANDLE         DestHandle;
+  CHAR16                    *Walker;
+  CHAR16                    *CleanFilePathStr;
 
   ASSERT(FileList != NULL);
   ASSERT(DestDir  != NULL);
@@ -278,10 +280,22 @@
   Cwd      = ShellGetCurrentDir(NULL);
   Response = *Resp;
 
+  CleanFilePathStr = AllocateCopyPool (StrSize (DestDir), DestDir);
+  if (CleanFilePathStr == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+
+  for (Walker = CleanFilePathStr; Walker != NULL && *Walker != CHAR_NULL ; Walker++) {
+    if (*Walker == L'\"') {
+      CopyMem(Walker, Walker+1, StrSize(Walker) - sizeof(Walker[0]));
+    }
+  }
+
   //
   // Get and validate the destination location
   //
-  ShellStatus = GetDestinationLocation(DestDir, &DestPath, Cwd);
+  ShellStatus = GetDestinationLocation(CleanFilePathStr, &DestPath, Cwd);
+  FreePool (CleanFilePathStr);
   if (ShellStatus != SHELL_SUCCESS) {
     return (ShellStatus);
   }
Index: Library/UefiShellLib/UefiShellLib.c
===================================================================
--- Library/UefiShellLib/UefiShellLib.c	(revision 16114)
+++ Library/UefiShellLib/UefiShellLib.c	(working copy)
@@ -1494,6 +1494,8 @@
 {
   EFI_STATUS                    Status;
   LIST_ENTRY                    mOldStyleFileList;
+  CHAR16                        *CleanFilePathStr;
+  CHAR16                        *Walker;
 
   //
   // ASSERT that Arg and ListHead are not NULL
@@ -1501,6 +1503,17 @@
   ASSERT(Arg      != NULL);
   ASSERT(ListHead != NULL);
 
+  CleanFilePathStr = AllocateCopyPool (StrSize (Arg), Arg);
+  if (CleanFilePathStr == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+
+  for (Walker = CleanFilePathStr; Walker != NULL && *Walker != CHAR_NULL ; Walker++) {
+    if (*Walker == L'\"') {
+      CopyMem(Walker, Walker+1, StrSize(Walker) - sizeof(Walker[0]));
+    }
+  }
+
   //
   // Check for UEFI Shell 2.0 protocols
   //
@@ -1508,11 +1521,12 @@
     if (*ListHead == NULL) {
       *ListHead = (EFI_SHELL_FILE_INFO*)AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));
       if (*ListHead == NULL) {
+        FreePool(CleanFilePathStr);
         return (EFI_OUT_OF_RESOURCES);
       }
       InitializeListHead(&((*ListHead)->Link));
     }
-    Status = gEfiShellProtocol->OpenFileList(Arg,
+    Status = gEfiShellProtocol->OpenFileList(CleanFilePathStr,
                                            OpenMode,
                                            ListHead);
     if (EFI_ERROR(Status)) {
@@ -1522,9 +1536,11 @@
     }
     if (*ListHead != NULL && IsListEmpty(&(*ListHead)->Link)) {
       FreePool(*ListHead);
+      FreePool(CleanFilePathStr);
       *ListHead = NULL;
       return (EFI_NOT_FOUND);
     }
+    FreePool(CleanFilePathStr);
     return (Status);
   }
 
@@ -1540,9 +1556,10 @@
     //
     // Get the EFI Shell list of files
     //
-    Status = mEfiShellEnvironment2->FileMetaArg(Arg, &mOldStyleFileList);
+    Status = mEfiShellEnvironment2->FileMetaArg(CleanFilePathStr, &mOldStyleFileList);
     if (EFI_ERROR(Status)) {
       *ListHead = NULL;
+      FreePool(CleanFilePathStr);
       return (Status);
     }
 
@@ -1549,6 +1566,7 @@
     if (*ListHead == NULL) {
       *ListHead = (EFI_SHELL_FILE_INFO    *)AllocateZeroPool(sizeof(EFI_SHELL_FILE_INFO));
       if (*ListHead == NULL) {
+        FreePool(CleanFilePathStr);
         return (EFI_OUT_OF_RESOURCES);
       }
       InitializeListHead(&((*ListHead)->Link));
@@ -1569,9 +1587,11 @@
       *ListHead = NULL;
       Status = EFI_NOT_FOUND;
     }
+    FreePool(CleanFilePathStr);
     return (Status);
   }
 
+  FreePool(CleanFilePathStr);
   return (EFI_UNSUPPORTED);
 }
 /**
