我有一個外部USB,NTFS格式的硬盤驅動器,其中包含我需要最終複製到Windows Server 2008 R2計算機上的驅動器的許多文件。在Windows上處理帶有文件名的回車文件
驅動器上的文件被安裝在Solaris上的驅動器運行的腳本放置在那裏。誰做了這個副本的用戶是不小心和編輯它們的拷貝腳本在Windows機器上,導致shell腳本線,如:
cp /sourceDir/sourceFileName /externalDrivePath/targetFileName\r\n
,因此,外部驅動器上的文件有尾回車他們文件名。標準Windows複製實用程序(複製,xcopy,robocopy)無法複製這些錯誤爲0x7B/123的文件:「文件名,目錄名稱或卷標語法不正確。」
我已經測試過,和我相當肯定,如果我有幹勁再次安裝在Linux中,我應該能夠將文件修復與如命令:
mv /externalDrive/targetFileName\r /externalDrivePath/targetFileName\n
不過,我不知道可以立即訪問Linux機器。
我迄今試圖修復/移動這些文件:
「應用程序」上的Windows Server 2008 R2的解決方案:
- 在Windows資源管理器重命名文件 - 將因不可行的解決方案大量的文件,但它無法正常工作。
- 匹配來自cmd提示符的文件名的通配符模式,例如
copy E:\externalDrivePath\targetFileName* anotherPath
。失敗,0x7B錯誤。 - 使用8.3(短)文件名從cmd提示覆制文件。有關文件沒有短名稱,每
dir /x
「編程」 輸出的Windows Server上的解決方案2008 R2:
- 複製/使用Python/Java的命名文件:任何企圖打開/複製回車文件將異常跟蹤返回到相同的0x7B Windows錯誤。
- 使用Windows C'CopyFile'API複製文件:失敗,並顯示0x7B錯誤。在這裏,我使用FindNextFile API找到了這些文件,並將該源路徑傳遞到CopyFile,但操作系統仍無法複製該文件。
- 使用fopen,ofstream等在C中編寫我自己的文件複製函數fopen調用再次失敗,0x7B。
- 使用C++ boost :: filesystem API複製文件:失敗,出現0x7B錯誤。再次,使用boost :: filesystem :: directory_iterator找到這些文件,並將找到的文件的路徑傳遞給boost :: filesystem :: copy_file()
- 將文件路徑提供給Win32 API CopyFile/MoveFile as「\?\ E:\ externalDrivePath \ targetFileName \ r」。調用再次失敗,併發生0x7B錯誤。
我也在OS X機器上安裝這個驅動器來運行這個拷貝,期望它能像Solaris那樣提供對NTFS驅動器的支持。但是,它無法將類似的錯誤消息複製到Windows - 我想OS X的NTFS實現更像「類Windows」?
如果這是可以解決的Windows上,我覺得它會要麼需要操縱文件本身一個非常低級的C函數,沒有「開放」是基於它的字符串的文件名。不知道如何去做。那個,或者我不知道哪個文件修復工具已經合併了這個功能。
任何其他辦法或建議如何實現我所描述的將是非常讚賞的。
您是否嘗試過使用'\\?\ E:\ externalDrivePath \ targetFileName'作爲Win32 API的路徑? – Simple
文件是否也有8.3個名字?技術上你是可選的,但這很常見。 FindFirstFile將會報告它。 – MSalters
將這兩個添加到我現在嘗試的事情列表中,但不幸的是這兩個都不適用。 – cuberoot8