Пакетный скрипт для перемещения файла и отображения в блокноте - PullRequest
0 голосов
/ 10 декабря 2018

Может ли кто-нибудь помочь с сценарием пакетного перемещения.

Я бы хотел, чтобы сценарий запрашивал путь к файлу источника, путь к файлу и имя файла.

Затем извышеуказанные 3 выполняют перемещение файла.У меня есть скрипт, который будет искать, если файл присутствует и отображать в блокноте результаты.Надеясь добавить к этому выше.

@echo off
:start

set /p filesource="Enter file source path:  "
set /p filedestination="Enter file destination path:  "
set /p filename="Enter file name to look for:  "

if "%filesource%"=="" goto :error
if "%filedestination%"=="" goto :error
if "%filename%"=="" goto :error

echo Moving %filename% From "%filesource%\%filename%" to %filedestination%.  
>> %f%
move "%filesource%\%filename%" %filedestination
echo. >> %f%
notepad %f%
goto :end

:error
echo You did not enter correct information.
pause
goto :start
:end

1 Ответ

0 голосов
/ 11 декабря 2018

Основная ошибка в командной строке:

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 /?

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...