下面是我放在一起的批处理脚本,它复制另一个文件夹的内容并将其粘贴到一个名为IC_Transfer的新文件夹中。
@echo off
@break off
@title IC Transfer
setlocal EnableDelayedExpansion
if not exist "C:\Temp\IC_Transfer" (
md "C:\Temp\IC_Transfer"
ROBOCOPY /-y "Q:\Work\Temp\Dan" "C:\Temp\IC_Transfer" /mir
if "!errorlevel!" EQU "0" (
echo Transfer Successful! )
) else (
if exist "C:\Temp\IC_Transfer" (
echo Error Transferring File
echo File Already Exists
:Choice
set /P c=Would You Like To Overwrite[Y/N]?
if /I "%c%" EQU "Y" goto Overwrite
if /I "%c%" EQU "N" goto Stop
) )
:Overwrite
md "C:\Temp\IC_Transfer"
ROBOCOPY "Q:\Work\Temp\Dan" "C:\Temp\IC_Transfer" /mir
if "!errorlevel!" EQU "0" (
echo Transfer Successful )
goto End
:Stop
echo Transfer Cancelled
goto End
:End
pause
exit
pause
exit
make目录和robocopy函数通过清除目录,重新创建并粘贴内容来工作。我无法工作的是选择命令。
无论我选择Y还是N,它都会覆盖文件内容。
我是批处理脚本的新手,所以任何帮助都会受到赞赏
答案 0 :(得分:2)
@echo off
@break off
@title IC Transfer
setlocal
if not exist "C:\Temp\IC_Transfer" (
md "C:\Temp\IC_Transfer"
ROBOCOPY /-y "Q:\Work\Temp\Dan" "C:\Temp\IC_Transfer" /mir
if not errorlevel 1 (
echo Transfer Successful!
) else (
echo Error Transferring File
echo File Already Exists
call :Choice
)
)
exit /b
:Choice
setlocal
set "c="
set /P "c=Would You Like To Overwrite[Y/N]? "
if /I "%c%" == "Y" (
call :Overwrite
) else if /I "%c%" == "N" (
call :Stop
) else call :Stop
exit /b
:Overwrite
ROBOCOPY "Q:\Work\Temp\Dan" "C:\Temp\IC_Transfer" /mir
if not errorlevel 1 echo Transfer Successful
pause
exit /b
:Stop
echo Transfer Cancelled
pause
exit /b
要解决此问题,括号代码块内的标签是a 坏主意,容易出错。所以请改为调用标签。
我用调用替换了goto,因为:Choice
可以使用调用。
这使:End
过时了。
您使用errorlevel
的延迟展开,但您可以使用
即if not errorlevel 1
检查整数值是否小于1。
延迟扩展已被删除。
答案 1 :(得分:2)
code blocks
(带括号的系列命令)中的标签会导致问题(:选择),并且最好被视为非法。
您已调用delayedexpansion
并认出errorlevel
可能随code block
而变化。您的set /p
更改了变量c
,但您在c
语句中使用的分析时间值为if
(%c%),而不是运行时值(!!C)
如果用户输入not-YN会发生什么?提示:从提示符中查看choice
命令 - choice /?
。
由于c
未设置在代码的开头,"%c%"
将评估为""
,"Y"
和"N"
都不会if
md
1}}失败,然后代码将进入下一个语句(:overwrite)
请注意md directoryname 2>nul
将创建目录或生成错误消息(如果它不存在),因此
md
应创建目录并禁止显示错误消息(如“目录已存在”),从而避免对SELECT *
into #xx
From (
Select *
FROM #x
union all
select * from MartDB.DBO.BAW_AllSources_Stage1
) AAAsds
进行门控测试。