无忧启动论坛

标题: 【已解决】这里的 if "%~f1"=="" 是什么意思?谢谢 [打印本页]

作者: yyz2191958    时间: 2024-2-25 11:27
标题: 【已解决】这里的 if "%~f1"=="" 是什么意思?谢谢
本帖最后由 yyz2191958 于 2024-2-25 14:38 编辑

问题解决了:


拖放就相当于命令行里命令之后的第一个参数,即%1
比如你将一个文件或目录拖放到批处理图标上,这个文件或目录就会被批处理识别为%1来操作
这一句中,%~f1 就是%1的全路径
意思就是如果%1路径为空就提示  ========= 【将*.webp】 拖拽到 【批处理图标】 ========
并到:m段执行

如果%1路径不为空,后面的代码就是转到%1路径,并设置窗口宽高及颜色
所以有拖放就到绿色窗口,没有拖放就出现黑色窗口提示=====================================
===============================================================
原来的问题:
webp-转-png-JPG格式(拖).bat:
@echo off
echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo. %【留下 10个 空行】%
if "%~f1"=="" echo.              ========= 【将*.webp】 拖拽到 【批处理图标】 ======== & goto :m
::=======================================================
cd /d "%~dp1"
::界面大小,Cols为宽,Lines为高
mode con cols=15 lines=7
color 2F
:menu
cls
ECHO.
ECHO  1:转为 PNG
ECHO  2:转为 JPG
ECHO.
set /p a=.▼.选择数字
cls
if %a%==1 goto :PNG
if %a%==2 goto :JPG
:PNG
for %%i in (*.webp) do %~dp0ffmpeg.exe -i "%%i" "%%~ni.png" -y
goto :menu
:JPG
for %%i in (*.webp) do %~dp0ffmpeg.exe -i "%%i" "%%~ni.jpg" -y
goto :menu
::=======================================================
:m
pause>nul 2>nul
exit


3.png (91.14 KB, 下载次数: 169)

3.png

作者: dos时代菜鸟    时间: 2024-2-25 11:36
%~fI        - 将 %I 扩展到一个完全合格的路径名

%~f1 表示批处理附带的第一个 参数 所包含的内容 转化成一个完整的文件路径
作者: yyz2191958    时间: 2024-2-25 11:38
dos时代菜鸟 发表于 2024-2-25 11:36
%~fI        - 将 %I 扩展到一个完全合格的路径名

%~f1 表示批处理附带的第一个 参数 所包含的内容 转化 ...

谢谢!我需要慢慢琢磨
作者: yyz2191958    时间: 2024-2-25 11:43
dos时代菜鸟 发表于 2024-2-25 11:36
%~fI        - 将 %I 扩展到一个完全合格的路径名

%~f1 表示批处理附带的第一个 参数 所包含的内容 转化 ...

%~f1下一行的:cd /d "%~dp1"————算不算第一个 参数 ?谢谢
作者: yyz2191958    时间: 2024-2-25 11:55
为什么拖拽的时候,能够跳过:第一、二行  代码?
作者: szwp    时间: 2024-2-25 11:59
如果为空说明没拖
作者: yyz2191958    时间: 2024-2-25 12:12
szwp 发表于 2024-2-25 11:59
如果为空说明没拖

%~f1——————用来判断有没有拖?
作者: zlq_hysy    时间: 2024-2-25 12:19
yyz2191958 发表于 2024-2-25 11:55
为什么拖拽的时候,能够跳过:第一、二行  代码?

压根就没跳过第一二代码,只是你没肉眼看见而已,十个空行被下面的cls命令清除,if判断不等于空后直接转到下一个命令行cd/d。。。。
作者: yyz2191958    时间: 2024-2-25 12:21
zlq_hysy 发表于 2024-2-25 12:19
压根就没跳过第一二代码,只是你没肉眼看见而已,十个空行被下面的cls命令清除,if判断不等于空后直接转 ...

原来是这样,谢谢
作者: yyz2191958    时间: 2024-2-25 12:24
zlq_hysy 发表于 2024-2-25 12:19
压根就没跳过第一二代码,只是你没肉眼看见而已,十个空行被下面的cls命令清除,if判断不等于空后直接转 ...

不对呀!
::cls——————注释了,也是一样跳过黑窗口
作者: hilsonma    时间: 2024-2-25 12:31
本帖最后由 hilsonma 于 2024-2-25 12:32 编辑

拖放就相当于命令行里命令之后的第一个参数,即%1
比如你将一个文件或目录拖放到批处理图标上,这个文件或目录就会被批处理识别为%1来操作
  1. if "%~f1"=="" echo.              ========= 【将*.webp】 拖拽到 【批处理图标】 ======== & goto :m
复制代码

这一句中,%~f1 就是%1的全路径
意思就是如果%1路径为空就提示  ========= 【将*.webp】 拖拽到 【批处理图标】 ========
并到:m段执行

如果%1路径不为空后面的代码就是转到%1路径,并设置窗口宽高及颜色

所以有拖放就到绿色窗口,没有拖放就出现黑色窗口提示

我通常直接使用 if %1.==. 来判断有没有拖放
由于拖放的文件或目录有可能含有空格,所以最好还是使用 if "%1"=="" 来判断有没有拖放
作者: yyz2191958    时间: 2024-2-25 12:33
hilsonma 发表于 2024-2-25 12:31
拖放就相当于命令行里命令之后的第一个参数,即%1
比如你将一个文件或目录拖放到批处理图标上,这个文件或 ...

很给力!
作者: hilsonma    时间: 2024-2-25 12:56
vhd文件可以直接双击挂载,但右键点弹出后其实并没有完全卸载,所以我做了一个批处理来卸载
现附上内容给楼主参考
  1. @echo off
  2. title vhd分离
  3. if %1.==. (echo.&set /p vhd1=请将要分离的vhd文件拖放到本窗口后按回车键:) else set vhd1=%1
  4. cmd /c "echo SELECT VDISK FILE=%vhd1% & echo DETACH VDISK"|diskpart.exe
复制代码

作者: yyz2191958    时间: 2024-2-25 13:00
hilsonma 发表于 2024-2-25 12:31
拖放就相当于命令行里命令之后的第一个参数,即%1
比如你将一个文件或目录拖放到批处理图标上,这个文件或 ...

结果实验:
if "%1"==""————目录没有空格的时候正常。有空格的时候,拖到没有反应
if %1==""—————目录有没有空格都正常

作者: hilsonma    时间: 2024-2-25 13:06
yyz2191958 发表于 2024-2-25 13:00
结果实验:
if "%1"==""————目录没有空格的时候正常。有空格的时候,拖到没有反应
if %1==""——— ...

那你试 if %1.==.
这是我一直使用的

有没有空格,有没有拖放,都试一下
作者: hilsonma    时间: 2024-2-25 13:09
你正在学习兴头上,所以辛苦你测试一下,我那个劲过去了,懒得折腾了
作者: yyz2191958    时间: 2024-2-25 13:12
hilsonma 发表于 2024-2-25 12:56
vhd文件可以直接双击挂载,但右键点弹出后其实并没有完全卸载,所以我做了一个批处理来卸载
现附上内容给 ...

        赞一个!
作者: zlq_hysy    时间: 2024-2-25 13:59
yyz2191958 发表于 2024-2-25 12:24
不对呀!
::cls——————注释了,也是一样跳过黑窗口

也可能设置颜色后内部初始化了,不知道呀。老弟,加油!
作者: szwp    时间: 2024-2-26 09:05
yyz2191958 发表于 2024-2-25 12:12
%~f1——————用来判断有没有拖?

如果不知道"%~f1"什么意思,可以用echo "%~f1" &pause 来观察,加在if前。
作者: yyz2191958    时间: 2024-2-26 10:36
szwp 发表于 2024-2-26 09:05
如果不知道"%~f1"什么意思,可以用echo "%~f1" &pause 来观察,加在if前。

        赞一个!
作者: szwp    时间: 2024-2-26 10:46
yyz2191958 发表于 2024-2-26 10:36
赞一个!

还可用title "%~f1"也能看到
作者: yyz2191958    时间: 2024-2-26 11:09
szwp 发表于 2024-2-26 10:46
还可用title "%~f1"也能看到

谢谢
作者: captain_g    时间: 2024-2-26 13:08
可以拖一个 名称 含与不含 空格 的文件或目录 看看区别;
拖文件或右键传入的情形,本人倾向于使用:set "a=%~1"

@echo off
set "a=%~1"
set b=%~1
set "c=%1"
set d=%1
echo.
echo 设置变量a用引号的(%%~1): %a%
echo.
echo 设置变量b不用引号的(%%~1): %b%
echo.
echo 设置变量c用引号的(%%1): %c%
echo.
echo 设置变量d不用引号的(%%1): %d%
pause >nul




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3