Основная ошибка в командной строке:
move "%filesource%\%filename%" %filedestination
Второй %
отсутствует при ссылке на переменную среды filedestination
.
Путь назначения также должен быть заключен в двойныекавычки в случае пробела или одного из этих символов &()[]{}^=;!'+,`~<|>
.
И следует убедиться, что путь назначения действительно заканчивается обратной косой чертой для перемещения файла в этот каталог, поскольку в противном случае это было бы возможночтобы переместить файл в каталог с другим именем.
Таким образом, эта командная строка должна быть:
move "%filesource%\%filename%" "%filedestination%\"
Но, честно говоря, пакетный файл нуждается в гораздо большем количестве кода для обеспечения отказоустойчивости.Например:
@echo off
goto Main
:UserPrompt
set "UserInput="
set /P "UserInput=Enter file %~2: "
rem Has the user entered no string?
if not defined UserInput goto ErrorInput
rem Remove all double quotes.
set "UserInput=%UserInput:"=%"
rem Has the user entered a string consisting only of double quotes?
if not defined UserInput goto ErrorInput
rem Check if file or directory exist at all.
if %1 == FileName (
rem The file name should not contain a directory separator.
if not "%UserInput:\=%" == "%UserInput%" goto ErrorInput
if not "%UserInput:/=%" == "%UserInput%" goto ErrorInput
if not exist "%FileSource%%UserInput%" (
echo/
echo There is no file "%FileSource%%UserInput%"
echo/
pause
echo/
goto UserPrompt
)
rem Prevent moving the batch file.
for %%I in ("%FileSource%%UserInput%") do if "%%~fI" == "%~f0" (
echo/
echo This batch file cannot be moved.
echo/
pause
echo/
goto UserPrompt
)
goto ReturnValue
)
rem Get full path in case of user entered a relative path.
for %%I in ("%UserInput%") do set "UserInput=%%~fI"
if not "%UserInput:~-1%" == "\" set "UserInput=%UserInput%\"
if not exist "%UserInput%" (
echo/
echo There is no directory "%UserInput%"
echo/
pause
echo/
goto UserPrompt
)
:ReturnValue
set "%1=%UserInput%"
goto :EOF
:ErrorInput
echo/
echo You did not enter correct information.
echo/
pause
echo/
goto UserPrompt
:Main
setlocal EnableExtensions DisableDelayedExpansion
call :UserPrompt FileSource "source path"
call :UserPrompt FileTarget "destination path"
call :UserPrompt FileName "name to look for"
set "LogFile=%TEMP%\%~n0.tmp"
echo Moving "%FileName%" from "%FileSource%" to "%FileTarget%".>"%LogFile%"
move /Y "%FileSource%%FileName%" "%FileTarget%" 2>>"%LogFile%"
echo/>>"%LogFile%"
Notepad.exe "%LogFile%"
del "%LogFile%" 2>nul
endlocal
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.
call /?
del /?
echo /?
endlocal /?
for /?
goto /?
if /?
move /?
pause /?
rem /?
set /?
setlocal /?
См. Также: