【问题标题】:Moving files with spaces in name batch scripting在名称批处理脚本中移动带有空格的文件
【发布时间】:2015-03-20 16:17:36
【问题描述】:

所以我试图模仿苹果的一些功能

我目前正在研究的一个功能是能够选择一个或多个文件,然后通过“上下文菜单”创建一个“新文件夹”(定向到通过 FOR 循环传递文件的批处理文件)然后移动文件进入那个“新文件夹”

我遇到的问题是我使用“robocopy”研究过的带有空格的文件名,但发现它有点棘手

到目前为止我的代码

@echo off
set cDir=%~dp1
set newFolder="%cDir%NewFolder"
md %newFolder%
echo.
:: get each selected file and echo
for %%I in (%*) do (
    echo %%I
    echo.
    echo %newFolder%
    move "%%I" "%newFolder%"
    echo.
)
pause

【问题讨论】:

  • 您的%newFolder 已经包含引号;因此无需使用movecommand 再次添加它们。
  • 使用~ 修饰符如下:move "%%~I" %newFolder%move "%%~I" %newFolder%\ 。阅读Command Line arguments (Parameters)
  • 感谢 JosefZ 和 Stephan 修复了它,现在它可以完美运行了。再次感谢 JosefZ 的参考
  • 嘿 Stephan 或 Josef 我正在尝试进一步扩展此功能,以便能够移动目录及其内容,您知道我如何使用我提供的代码(以及您的更新)来实现这一目标吗?

标签: windows batch-file scripting cmd


【解决方案1】:

您修改后的代码也应该移动文件和文件夹。为了安全起见,这是我的代码变体。请注意 setmdmove 语句中的引用变化,但我重复一遍:您的(修改的)引用变体也应该起作用:

@echo off
set cDir=%~dp1
set "newFolder=%cDir%NewFolder"
md "%newFolder%"
echo.
:: get each selected file and echo
for %%I in (%*) do (
    echo %%I
    echo.
    echo %newFolder%
    move "%%~I" "%newFolder%\"
    echo.
)
pause

虽然move /?移动文件并重命名文件和目录,但源和目标都可能是一个文件夹 或单个文件(resource,在我的 Win-8)。

证明。

==>move "D:\Path\COCL\bu bu bu" "D:\Path\content\"
        1 dir(s) moved.

==>move "D:\Path\content\bu bu bu" "D:\Path\COCL\"
        1 dir(s) moved.

==>

下一个资源:Command Line arguments (Parameters)

【讨论】:

  • 好的,现在它正在工作。谢谢你,约瑟夫的一切!我喜欢 ss64 网站,因为它可以扩展我对 CMD 命令的了解。
猜你喜欢
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 2013-12-17
相关资源
最近更新 更多