Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Batch file 批处理(如果存在)xcopy并为文件创建新文件夹_Batch File_If Statement_Xcopy - Fatal编程技术网

Batch file 批处理(如果存在)xcopy并为文件创建新文件夹

Batch file 批处理(如果存在)xcopy并为文件创建新文件夹,batch-file,if-statement,xcopy,Batch File,If Statement,Xcopy,我对这里和编码世界都是全新的,所以请原谅任何愚蠢的问题。我的目标是找到指定目录上的文件,将它们复制并移动到另一个目录,但为我要移动的文件创建一个新文件夹 为了提供更多信息,我将大量wav文件从一台服务器移动到另一台服务器 我为此找到的代码: If exist \\%DIR%\%Folder%\123456789.wav xcopy \\%DIR%\%Folder%\123456789.wav D:\%New Folder%\ /y 因此,这将找到我想要的文件,复制它,然后用我的%new Fol

我对这里和编码世界都是全新的,所以请原谅任何愚蠢的问题。我的目标是找到指定目录上的文件,将它们复制并移动到另一个目录,但为我要移动的文件创建一个新文件夹

为了提供更多信息,我将大量wav文件从一台服务器移动到另一台服务器

我为此找到的代码:

If exist \\%DIR%\%Folder%\123456789.wav xcopy \\%DIR%\%Folder%\123456789.wav D:\%New Folder%\ /y
因此,这将找到我想要的文件,复制它,然后用我的%new Folder%粘贴到新目录中。文件夹将不存在,我希望此命令在粘贴wav文件之前创建它。

xcopy将为您创建目录结构,如果它还不存在,如果您有尾随的反斜杠

@echo off
set "NewFolder=D:\Some Destination\folder\"
set "DIR=someserver\Some Source folder"
set "Folder=Another Folder"
If exist "\\%DIR%\%Folder%\123456789.wav" (
      xcopy "\\%DIR%\%Folder%\123456789.wav" "%NewFolder%" /y
)

不会的。您尚未定义变量dir、folder和new folder。你的问题没有提供足够的信息来给出明智的答案。 我将回答这个问题,就好像你在使用windows,你想要一个批处理文件一样

请在阅读后修正你的问题:

批处理文件:

@echo off
setlocal enableextensions
set dir=??????????
set folder=????????????
set "new folder=??????????"
for /f "tokens=*" %%F in ('dir /s /b "%dir%\%folder%\*.wav"') do %systemroot%\system32\xcopy.exe /sy "%%F" "d:\%new folder%\"
exit /b 
将批处理文件放在.wav文件所在卷的根文件夹中并运行它

如果可以像windows快捷方式一样简单: %systemroot%\system32\xcopy.exe/sy*.wav d:\new文件夹\ 复制文件夹和子文件夹中的所有.wav文件,创建新文件夹,无提示,覆盖前不提示

但是,由于您是在网络上复制文件,因此更为复杂,而且由于您提供的信息太少,因此这只是一个偶然的机会

更多信息:

xcopy/

集/?定义变量

对于/

目录/?查找文件


cmd/?

您实际上不需要检查文件是否存在,如果不存在,则无法复制。为了补偿来自不存在文件的错误消息,可以使用2>NUL:XCopy\\%DIR%\%Folder%\123456789.wav D:\%New Folder%\/Y 2>NUL将消息重定向到NUL。您可能还需要在路径周围使用双引号,以保护空格等。我建议使用%SystemRoot%而不是%windir%。自Windows NT4以来,不推荐使用环境变量windir。windir是一个默认定义的系统环境变量,但可以从系统环境变量列表中删除,在这种情况下,最晚重新启动Windows后,任何使用windir的应用程序都不再存在windir。SystemRoot始终由Windows定义,现有唯一未定义它的方法是在脚本/应用程序中显式删除它。PS:从系统变量列表中删除环境变量windir后,在Windows 7上再也无法单击“控制面板-系统”中的“高级系统设置”。结果是错误消息:Windows找不到“%windir%\system32\systempropertiesadvanced.exe”。请确保键入的名称正确,然后重试。非常奇怪的是,具有本地管理员权限的用户可以删除不推荐使用的环境变量windir,而Windows本身在其可执行文件和库中使用windir而不是SystemRoot。mofi女士真是太遗憾了。Beej的评论听起来合理吗:有趣的事实——在Windows101809上,windir%仍然非常重要,没有它,你无法运行任何提升的东西。。。这意味着你不能把它放回去,因为点击环境变量注册表显然需要提升。我在系统变量列表中看到了windir环境变量,但直到昨天,我才删除了这个系统环境变量,并检查Windows是否在启动新的命令进程时定义了它。如果总是在从Windows桌面启动新命令进程时定义SystemRoot,则不会出现这种情况。然后我想再次定义windir,因为我知道许多批处理文件以及应用程序和库仍在使用它,看到Windows本身仍在使用它,我真的很震惊,对于我来说,以管理员%SystemRoot%\system32\systempropertiesadvanced.exe的身份在cmd窗口中运行并再次将环境变量windir添加到系统环境变量列表中绝对没有问题。我真的很惊讶,一个仍然非常重要的环境变量并不是由Windows自动预定义的,比如SystemRoot、SystemDrive,还有很多没有列在用户或系统变量列表中的变量,而是默认定义的,因为它可以在cmd窗口中的running set上看到。在我看来,这真是微软的耻辱。