在Windows上使用文件名回车处理文件

 怪物-pp_912 发布于 2023-01-29 12:15

我有一个外部USB,NTFS格式的硬盘驱动器,其中包含许多文件,我需要最终复制到Windows Server 2008 R2计算机上的驱动器.

驱动器上的文件由安装在Solaris上的驱动器运行的脚本放置在那里.执行此副本的用户不小心并在Windows计算机上编辑了他们的副本脚本,从而产生了shell脚本行,例如:

cp /sourceDir/sourceFileName /externalDrivePath/targetFileName\r\n

因此,外部驱动器上的文件在其文件名中有一个尾随回车符.标准Windows复制实用程序(copy,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的文件路径提供为"\?\ E:\ externalDrivePath\targetFileName\r \n".调用再次失败,出现0x7B错误.

我还涉及在OS X机器上安装此驱动器以运行副本,期望它将像Solaris那样为NTFS驱动器提供支持.但是,它无法将类似的错误消息复制到Windows - 我猜OS X的NTFS实现更像"Windows-like"?

如果这在Windows上是可解的,我觉得它要么需要一个非常低级的C函数来操作FILE本身,而不是根据它的字符串文件名"打开"它.不知道该怎么做.那个,或者我不知道的一些文件修复工具已经包含了这个功能.

任何替代方法或建议如何实现我所描述的将是最受欢迎的.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有