批量移动“%1”到位置

时间:2014-01-04 05:33:28

标签: batch-file cmd

我正在编写一个充当快捷方式的脚本,让我想将输入发送到我的图片

@echo off

echo drop input

pause

move "%1" "C:\Users\%username%\Pictures"

pause

问题似乎是%1 /输入需要以某种方式描述。 因为当我放下一张图片时,它说         系统找不到指定的文件。

2 个答案:

答案 0 :(得分:0)

@echo off 

    rem Prepare environment
    setlocal enableextensions disabledelayedexpansion

:loopParameters
    rem Variable to hold file name
    set "file="

    rem If a file has been dropped on batch file, retrieve if from parameters
    rem If no file dropped, ask for one
    if "%~1"=="" (
        set /p "file=Drop file here:"
    ) else (
        set "file=%~1"
    )

    rem Check if there is something to do. If not, the process has ended
    if not defined file goto endProcess
    if not exist "%file%" goto endProcess

    rem Do the work
    echo move "%file%" "C:\Users\%username%\Pictures"

    rem Determine if there is something more to process
    if not "%~1"=="" if not "%~2"=="" ( shift & goto :loopParameters )

:endProcess
    rem Wait to see output of commands
    echo.
    pause

    rem Clean and exit 
    endlocal
    exit /b 

它将处理放入批处理文件中的文件(无需先启动批处理文件)。如果启动批处理文件而不删除任何文件,它将要求处理一个文件。

如果文件被放入批处理文件中,资源管理器会生成要作为批处理文件的单独参数处理的文件列表。因此,第一个文件位于%1,第二个位于%2,...在此代码中,要处理的文件是从%1检索的。处理完第一个文件后,如果有更多文件要处理,shift命令用于“移动”参数列表,因此%2的内容将位于%1,{ {1}}将在%3中,...这样,下一个要处理的文件将在每次迭代中再次位于%2

但是命令行的长度限制为8191个字符。当资源管理器在同一命令行中传递所选文件的完整列表时,如果选择了大量文件,则不会处理列表的最后部分。

答案 1 :(得分:0)

你需要命令中的tilda,如下所示,因为如果它没有tilda,那么掉落引用的iems就会失败。

move "%~1" "C:\Users\%username%\Pictures"