我有一个批处理脚本将文件夹从我的计算机硬盘驱动器复制到便携式硬盘。我遇到的问题是,当我在便携式驱动器上运行IF EXIST时,它不起作用,这意味着它会跳过检查。文件从计算机驱动器复制到便携式设备就好了,但我想在我的脚本中验证它,我做错了什么?
::CLS
::@ECHO OFF
set myDir="C:\Users\Someone"
set userDir="userfolder"
set copyDrive="R:"
call:checkExist %myDir% %userDir%
pause
goto:eof
:checkExist
IF EXIST %~1\%~2 (
echo %~2 Exists
dir %~1\%~2 )
pause
FOR /f "tokens=2-4 skip=1 delims=(-)" %%G IN ('echo.^|date') DO (
FOR /f "tokens=2 delims= " %%A IN ('date /t') DO (
SET v_first=%%G
SET v_second=%%H
SET v_third=%%I
SET v_all=%%A
)
)
SET %v_first%=%v_all:~0,2%
SET %v_second%=%v_all:~3,2%
SET %v_third%=%v_all:~6,4%
SET DATE2=%MM%-%DD%-%YY%
mkdir %copyDrive%\%DATE2%
dir %copyDrive%\%DATE2%
cd %~1\%~2
pause
xcopy /e %~1\%~2 %copyDrive%\%DATE2%
下面的IF EXIST不起作用。为什么!?
IF EXIST %copyDrive%\%DATE2% (
echo %DATE2% Exists
}
goto:eof
答案 0 :(得分:0)
非常仔细地检查你的:checkExist程序。
FOR /f "tokens=2-4 skip=1 delims=(-)" %%G IN ('echo.^|date') DO (
FOR /f "tokens=2 delims= " %%A IN ('date /t') DO (
SET v_first=%%G
SET v_second=%%H
SET v_third=%%I
SET v_all=%%A
)
)
所以 - 现在你已经设置了v_*
SET %v_first%=%v_all:~0,2%
SET %v_second%=%v_all:~3,2%
SET %v_third%=%v_all:~6,4%
为什么要重新设置大部分?你确定你的日期格式吗?可以抑制或用空格替换前导零?日期格式已本地化 - 没有显示重要示例日期的具体示例,我们正在猜测。
SET DATE2=%MM%-%DD%-%YY%
啊 - 使用date2
,MM
和dd
将yy
设置为某种格式。或许可以设置这些元素 - 也许不是重新设置v_*
值
mkdir %copyDrive%\%DATE2%
dir %copyDrive%\%DATE2%
啊 - 使用该日期值。我想这里date2
包含--
,只是安静地。
修改批次给出额外的部分信息,并假设%date%
格式为ddd mm/dd/yyyy
::CLS
::@ECHO OFF
set "myDir=C:\Users\Someone"
set "userDir=userfolder"
set "copyDrive=R:"
call:checkExist "%myDir%" "%userDir%"
pause
goto:eof
:checkExist
IF EXIST "%~1\%~2" (
echo "%~2" Exists
dir "%~1\%~2" )
pause
)
SET "DATE2=%date:~-4%%date:~-10,2%%date:~-7,2%"
mkdir "%copyDrive%\%DATE2%"
dir "%copyDrive%\%DATE2%"
cd "%~1\%~2"
pause
xcopy /e "%~1\%~2" "%copyDrive%\%DATE2%\"
请注意,我已选择使用目的地日期YYYYMMDD。 ALTER
SET "DATE2=%date:~-4%%date:~-10,2%%date:~-7,2%"
到
SET "DATE2=%date:~-10,2%-%date:~-7,2%-%date:~-4%"
如果你坚持要有MM-DD-YYYY日期。
注意qutes的位置。格式set "var=value"
旨在确保忽略杂散空格。