Tom*_*son 19 windows cmd batch-file
我有一个目录,其中包含文件和许多级别的子目录:
C:\Source
Run Code Online (Sandbox Code Playgroud)
我想将C:\ Source的内容移动到:
C:\Destination
Run Code Online (Sandbox Code Playgroud)
要求:
尝试0
XCOPY /E "C:\Source" "C:\Destination"
Run Code Online (Sandbox Code Playgroud)
这很好用,但它复制而不是移动.我无法复制然后删除源,因为我正在移动一大堆文件,并且没有足够的磁盘空间一次有两个副本.
尝试1
MOVE "C:\Source" "C:\Destination"
Run Code Online (Sandbox Code Playgroud)
这将整个C:\ Source目录移动到 C:\ Destination中,所以我最终得到:
C:\Destination\Source
Run Code Online (Sandbox Code Playgroud)
尝试2
在这个问题和接受的答案的帮助下,我提出了:
for /r "C:\Source" %%x in (*) do move "%%x" "C:\Destination"
Run Code Online (Sandbox Code Playgroud)
这会移动C:\ Source中的文件,但不会移动子目录或其内容.请注意,我使用%% x而不是%x,因为我在批处理文件中使用它.
使用FOR似乎很有希望,但我不确定我是否使用了正确的语法?我错过了什么吗?
尝试3
正如Nick D所说,我尝试重命名:
重命名"C:\ Source"目的地
对于示例场景,我给出了这个工作正常.不幸的是,我的真实目标目录与源目录处于不同的级别,似乎不支持:
C:\>REN /?
Renames a file or files.
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.
Note that you cannot specify a new drive or path for your destination file.
Run Code Online (Sandbox Code Playgroud)
我得到"命令的语法不正确." 如果我尝试指定更复杂的目标路径,则会出现错误,例如:
RENAME "C:\Source" "C:\MyOtherDirectory\Destination"
RENAME "C:\Source" "MyOtherDirectory\Destination"
Run Code Online (Sandbox Code Playgroud)
Dav*_*ams 27
毫无疑问,使用robocopy.它是一个简单但非常有用的工具.
robocopy /move /e sourcedir destdir
Run Code Online (Sandbox Code Playgroud)
这将移动所有文件和文件夹,包括空文件,在移动后删除每个原始文件.
如果您没有安装robocopy,可以单独下载或作为Microsoft资源工具包的一部分下载.
ljs*_*ljs 11
更新:
调整后的代码为.检查文件夹是否已存在于目标位置,在这种情况下移动该文件夹中的文件(并继续遍历源目录结构),否则移动文件夹批发.
在脚本的末尾,完全删除源文件夹以消除这些文件夹,这些文件夹已将文件移动到目标位置已存在的文件夹(这意味着这些文件夹已清空但未在源处删除).
另外,我们检查文件夹是否为空且在目的地是否已存在,在这种情况下我们什么也不做(并将源文件夹保留为删除到脚本的最后一行).不执行此操作会导致"文件名,目录名称或卷标语法不正确".错误.
唷!请告诉我你是如何继续这样做的!我测试了这个,它似乎运作良好.
for /d /r "c:\source" %%i in (*) do if exist "c:\destination\%%~ni" (dir "%%i" | find "0 File(s)" > NUL & if errorlevel 1 move /y "%%i\*.*" "c:\destination\%%~ni") else (move /y "%%i" "c:\destination")
move /y c:\source\*.* c:\destination
rd /s /q c:\source
Run Code Online (Sandbox Code Playgroud)