我是编程新手,没有任何背景知识。 我正在创建一个批处理脚本,它将根据用户输入创建文件夹。 然后,它会将文件从共享服务器复制到已创建的本地文件夹。
我有以下脚本:
@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"
一直以来,代码都做得很好,直到我需要检查文件夹是否存在的部分。如果是,那么我需要将文件从其他位置复制到此文件夹。 但我无法让它发挥作用。我认为我的语法不正确。 我如何让它工作? 感谢任何帮助。
答案 0 :(得分:0)
IF EXIST .\Folder1\ xcopy ...
您的代码在当前目录中创建(例如)folder1
,然后在父目录中查找folder1
。添加\
仅查找目录,而不是文件。
您是否知道xcopy
会将文件复制到当前目录,而不是folder1
子目录?
xcopy "C:\ProgramFiles\kasras01\file2.txt" ".\folder%input%\"
应该创建并复制。您无疑要首先验证input
是1
还是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!
)