用于检查文件夹是否存在的批处理脚本。如果是,则将文件从另一个文件夹复制到此文件夹

时间:2018-06-07 08:20:40

标签: batch-file conditional copy-paste

我是编程新手,没有任何背景知识。 我正在创建一个批处理脚本,它将根据用户输入创建文件夹。 然后,它会将文件从共享服务器复制到已创建的本地文件夹。

我有以下脚本:

    @ECHO OFF
REM *********************************************************************
REM **This will create directories and Copy Files for your project**
REM *********************************************************************

ECHO Plese enter the no. between 1 to 5 only
set /p input=[Please enter:1-Belgium, 2-Austria, 3-France, 4-Germany, 5-Greece]

if %input%==1 md BEL

if %input%==2 md AUT

if %input%==3 md FRA

if %input%==4 md DEU

if %input%==5 md GRE

if %input%==1 cd BEL

if %input%==2 cd AUT

if %input%==3 cd FRA

if %input%==4 cd DEU

if %input%==5 cd GRE

::ECHO Please enter the no. between 1 to 5 only

:END

set /p userinput=[Please enter your folder name]

mkdir %userinput%

cd %userinput%

set /p input=[Press 1 for 1.0, 2 for 2.0]

if %input%==1 md Folder1
if %input%==2 md Folder2
IF EXIST .\Folder1 xcopy "C:\ProgramFiles\kasras01\file2.txt"

一直以来,代码都做得很好,直到我需要检查文件夹是否存在的部分。如果是,那么我需要将文件从其他位置复制到此文件夹。 但我无法让它发挥作用。我认为我的语法不正确。 我如何让它工作? 感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

IF EXIST .\Folder1\ xcopy ...

您的代码在当前目录中创建(例如)folder1,然后在目录中查找folder1。添加\仅查找目录,而不是文件。

您是否知道xcopy会将文件复制到当前目录,而不是folder1子目录?

xcopy "C:\ProgramFiles\kasras01\file2.txt" ".\folder%input%\"

应该创建并复制。您无疑要首先验证input1还是2

答案 1 :(得分:0)

发布的脚本的底线看起来应该更像:

IF EXIST "Folder1" XCOPY "C:\ProgramFiles\kasras01\file2.txt" "Folder1\" /Y

这里也是一个重写的例子,使用Choice作为受控输入,Set /P检查不受控制的输入:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
CD /D "%~dp0" 2>Nul || Exit /B
REM **************************************************************************
REM ** This will create directories and copy a single file for your project **
REM **************************************************************************
Echo 1. Belgium&Echo 2. Austria&Echo 3. France&Echo 4. Germany&Echo 5. Greece
Choice /C 12345 /M "Which one"
If ErrorLevel 5 MD "GRE" 2>Nul & CD "GRE"
If ErrorLevel 4 MD "DEU" 2>Nul & CD "DEU"
If ErrorLevel 3 MD "FRA" 2>Nul & CD "FRA"
If ErrorLevel 2 MD "AUT" 2>Nul & CD "AUT"
If ErrorLevel 1 MD "BEL" 2>Nul & CD "BEL"
:DirPick
Echo(&Echo Please type your chosen directory name
Set /P "UserInput= then press enter: "
If Not Defined UserInput Echo Empty names are disallowed& GoTo DirPick
SetLocal EnableDelayedExpansion
For /F Tokens^=2^ Delims^=^\^/^:^*^?^"^|^<^>^ EOL^= %%A In ("[!UserInput!]"
) Do Echo Disallowed character detected& Set "UserInput=" & GoTo DirPick
EndLocal & MD "%UserInput%" 2>Nul & CD "%UserInput%"
Choice /C 12 /N /M "Press 1 for 1.0, 2 for 2.0"
XCopy "C:\ProgramFiles\kasras01\file2.txt" "Folder%ErrorLevel%\" /Y>Nul

该脚本目前设计为使用自己的位置作为新目录的基础等。如果您希望使用其他基本目录,请仅在%~dp0行更改为3您需要的路径。
底部的XCopy命令当前没有检查机制,这意味着如果"C:\ProgramFiles\kasras01\file2.txt"不存在,则也不会创建Folder[1|2]! (否则会创建Folder[1|2]并将"C:\ProgramFiles\kasras01\file2.txt"复制到其中。)

答案 2 :(得分:0)

我需要检查目录中是否存在文件夹或文件,我需要区分它们。

我发现在某些情况下使用 \nul 是不可靠的(Windows 10) - 这意味着无论是否存在同名的文件或文件夹,检查 IF EXIST "%foldername%\nul" 都会返回 true。

我发现在我的情况下,使用 IF EXIST "%foldername%\"(没有 nul)效果很好。

片段:

IF EXIST "%fname%" (
goto :f1
) ELSE (
goto :f2
)

:f1
IF EXIST "%fname%\" (
echo Folder with the same name already exists!
echo Cannot continue!
) ELSE (
echo File with the same name already exists!
echo Cannot continue!
)