Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 批处理文件移动名称中带有空格的文件。_File_Batch File_Directory_Names - Fatal编程技术网

File 批处理文件移动名称中带有空格的文件。

File 批处理文件移动名称中带有空格的文件。,file,batch-file,directory,names,File,Batch File,Directory,Names,我希望有人能帮我解决这个问题。过去几天我一直在谷歌上搜索答案,结果一无所获。我有一个由两部分组成的代码,首先从子文件夹中取出所有内容,然后第二部分按类型将这些文件移动到位于其他位置的其他文件夹中。我可以让代码在测试设置中工作,但在我试图移动的文件中它不会工作。我认为这与文件名中有空格有关,但我不确定。这是密码。谢谢大家 第一部分 FOR /R C:\Users\Laptop02\Desktop\Folder 1 Test %%i IN (*.*) DO MOVE %%i C:\Users\La

我希望有人能帮我解决这个问题。过去几天我一直在谷歌上搜索答案,结果一无所获。我有一个由两部分组成的代码,首先从子文件夹中取出所有内容,然后第二部分按类型将这些文件移动到位于其他位置的其他文件夹中。我可以让代码在测试设置中工作,但在我试图移动的文件中它不会工作。我认为这与文件名中有空格有关,但我不确定。这是密码。谢谢大家

第一部分

FOR /R C:\Users\Laptop02\Desktop\Folder 1 Test  %%i IN (*.*) DO MOVE %%i C:\Users\Laptop02\Desktop\Folder 1 Test
第二部分

@echooff
set media=C:\Users\Laptop02\Desktop\Foder 2 Test
set jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata
set xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata

move %dlDir%*.avi %media%
move %dlDir%*/*.avi %meia%
move %dlDir%*.mp4 %media%
move %dlDir%*/*.mp4 %media%
move %dlDir%*.mkv %media%
move %dlDir%*/*.mkv %media%
move %dlDir%*.jpg %jpg%
move %dlDir%**.xml %xml%

再次感谢

您需要在名称中可能有空格的文件周围加引号,例如

move "%dlDir%*.avi" "%media%"
更新

对于部分的
,添加

"delims=" 
像这样:

FOR /F "delims=" IN (dir /b /s "C:\Users\Laptop02\Desktop\Folder 1 Test")

虽然move命令很好且上述方法有效,但使用以下支持多线程的
robocopy
命令,应该可以更快地复制或移动许多文件:

@echo off
set "source=C:\Users\Laptop02\Desktop\Folder 1 Test"
set "media=C:\Users\Laptop02\Desktop\Foder 2 Test"
set "jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
set "xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
robocopy /s /mov /mt "%source%" "%media%" *.avi
robocopy /s /mov /mt "%source%" "%media%" *.mp4
robocopy /s /mov /mt "%source%" "%media%" *.mkv
robocopy /s /mov /mt "%source%" "%jpg%" *.jpg
robocopy /s /mov /mt "%source%" "%xml%" *.xml
pause
或者,只移动一次文件也会更快:

@echo off
set "source=C:\Users\Laptop02\Desktop\Folder 1 Test"
set "media=C:\Users\Laptop02\Desktop\Foder 2 Test"
set "jpg=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"
set "xml=C:\Users\Laptop02\Desktop\Foder 2 Test\mediadata"

cd "%source%"
for /r "%~dp0" %%A in (*) do (
    if "%%~xA"==".avi" move "%%~A" "%media%\"
    if "%%~xA"==".mp4" move "%%~A" "%media%\"
    if "%%~xA"==".mkv" move "%%~A" "%media%\"
    if "%%~xA"==".jpg" move "%%~A" "%jpg%\"
    if "%%~xA"==".xml" move "%%~A" "%xml%\"
)
pause

但在第一部分仍然需要帮助。仍然不会从子文件夹中提取名称中有空格的文件。@IdeaBak:您是否引用了变量
DO MOVE“%%i”
?您的第1部分是否如下所示:
对于/R“C:\Users\Laptop02\Desktop\Folder 1 Test”%%i in(*.*)确实移动“%%i”C:\Users\Laptop02\Desktop\Folder 1 Test”
?每当您使用包含空格的文字字符串时,都需要使用周围的引号来封装空格。@David没有,但将其更改为您以前使用过的字符串也不起作用。谢谢您的帮助。@IdeaBak在运行批处理脚本时是否显示任何错误消息?这通常会缩小对问题的搜索范围。文件名中是否有其他特殊字符<代码>“()!&