【问题标题】:windows batch move files with wildcard behaves oddly带有通配符的 Windows 批量移动文件行为异常
【发布时间】:2018-04-13 20:10:37
【问题描述】:

嗨,我有包含图像的文件夹,当我运行“move C:\test\from\007* C:\test\to\”时 以 009 开头的文件也会被复制:

C:\test\from>移动 C:\test\from\007*.jpg C:\test\to\

C:\test\from\007014_1112017.JPG

C:\test\from\009408_1112017_12.JPG

C:\test\from\009086_1112017_5.JPG

C:\test\from\009437_1112017_4.JPG

C:\test\from\009429_1112017_5.JPG

C:\test\from\009120_1112017_4.JPG

C:\test\from\009408_1112017_2.JPG

     7 file(s) moved.

怎么会这样?

【问题讨论】:

  • 我无法复制您的输出。当我使用相同的命令测试您的确切文件夹结构和文件名时,它只会移动 007 文件。
  • @Squashman as Magoo 说 dir /x 显示文件长名称为“009429_1112017_5.JPG”,但短名称为“007971~1.JPG”
  • 很确定您没有向我们显示实际的文件名。在所有条件相同的情况下,所有计算机上的短文件名都应该相同。我在 Windows XP、Windows 7、Windows 2008 Server 和 Windows 2012 Server 上测试了您的文件名。在所有系统上,没有一个 009 文件首先显示为 007。所有 7 个文件在所有系统上都显示为相同的短文件名。

标签: batch-file cmd windows-10


【解决方案1】:

默认情况下,文件有一个“长名称”和一个“短名称”。

您的move 将移动与您的掩码匹配的文件任何一个 名称。

您可以使用 dir /x 显示文件的短名称

【讨论】:

    【解决方案2】:

    您的解决方法是使用 FINDSTR 来匹配 dir 命令的实际输出。 dir 命令的输出将始终输出实际文件名,而不是短文件名。

    FOR /F "delims=" %%G in ('dir /b /a-d 007*.jpg^|findstr /r /c:"^007.*\.jpg"') do move "%%G" "C:\test\to\"
    

    【讨论】:

    • 就个人而言,在这种情况下,我更喜欢findstr /i /b /L /c:"007"(大小写-insensitive,begins L迭代地使用 constant 字符串 - 但毫无疑问它是依赖于实例的
    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 2011-05-15
    • 2015-09-13
    • 2013-07-09
    • 2015-02-11
    • 2023-04-06
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多