Board logo

标题: [文件操作] 已解决-bat文件拖入功能失效 [打印本页]

作者: cbbos    时间: 2024-10-19 15:17     标题: 已解决-bat文件拖入功能失效

本帖最后由 cbbos 于 2024-10-19 23:31 编辑

比如这个代码前段时间还能识别拖入文件路径,现在突然识别不到了,输出Input file not found
  1. FPP "%~1" -o "%~dp1MOD.bin" > output.tmp
复制代码

作者: Batcher    时间: 2024-10-19 15:31

回复 1# cbbos
  1. echo FPP "%~1" -o "%~dp1MOD.bin"
  2. pause
复制代码
代码修改成上面这个样子,按照你的方法执行,截图发出来看看。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: cbbos    时间: 2024-10-19 15:53

回复 2# Batcher


    找了个简单的bat试了下
  1. @echo off
  2. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  3. if '%errorlevel%' NEQ '0' (
  4. echo Requesting administrative privileges...
  5. goto UACPrompt
  6. ) else ( goto gotAdmin )
  7. :UACPrompt
  8. echo Set UAC = CreateObject("Shell.Application") > "%temp%\getadmin.vbs"
  9. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  10. "%temp%\getadmin.vbs"
  11. exit /B
  12. :gotAdmin
  13. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  14. pushd "%CD%"
  15. CD /D "%~dp0"
  16. echo LENV.exe "%~1" -decrypt
  17. pause
复制代码
输出
LENV.exe "" -decrypt
请按任意键继续. . .



我发现,现在所有使用%~1获取拖入文件路径的bat都使用不了了。
作者: Five66    时间: 2024-10-19 16:15

用vbs重新运行时没有带上参数??
作者: aloha20200628    时间: 2024-10-19 16:39

回复 3# cbbos

第9行代码改成如下一行试试...
  1. echo UAC.ShellExecute "%~f0", "%~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
复制代码

作者: cbbos    时间: 2024-10-19 16:59

本帖最后由 cbbos 于 2024-10-19 17:01 编辑

回复 4# Five66
回复 5# aloha20200628


    这个是调用管理员的,使用绝对路径没问题。以前使用拖入文件也没问题,现在不知道怎么回事,所有使用%~1获取拖入文件路径的bat都使用不了了。
作者: 77七    时间: 2024-10-19 17:32

按站长2楼的代码,执行,看看有什么问题
作者: aloha20200628    时间: 2024-10-19 18:29

本帖最后由 aloha20200628 于 2024-10-19 18:35 编辑

回复 3# cbbos

用3楼的代码复盘一下整个流程》
   首次运行批处时虽然拖入了 "%~1",但因当前批处未被提权故循行了 '提权' 流程,代码跑到第11行即退出了
   退出前启动了用来‘提权’的vbs脚本
   但临时写出的vbs代码中遗失了原先的 "%~1",故用vbs脚本二次重启批处时就没有了 "%~1",因此第16行代码中的 "%~1" 就成了空值 "" ...
5楼代码就是为此打个补丁,在临时写出的vbs代码中补上 "%~1" 。

另言之》若 LENV.exe "%~1" -decrypt 无须提权也能正常运行,楼主可用以下代码验证一下 "%~1" 是否还是空值
  1. @echo off
  2. echo LENV.exe "%~1" -decrypt
  3. pause&exit/b
复制代码

作者: cbbos    时间: 2024-10-19 20:21

回复 7# 77七


    3楼就是按站长的来的,还是获取不到
作者: cbbos    时间: 2024-10-19 20:25

本帖最后由 cbbos 于 2024-10-19 20:31 编辑

回复 8# aloha20200628


    试了下,还真是这问题,不提权限就能正确获取到路径了。估计系统环境哪里出了问题,之前一直没问题

编辑:补上%~1后可以正确获取了,这是不是系统环境除了问题?之前没加上%~1也能正确获取路径。
作者: 77七    时间: 2024-10-19 21:11

回复 9# cbbos

所以你说的突然不能用了,是在添加了 获取管理员权限的代码 之后,那原因不是很明显吗?
获取管理员权限是用其它脚本启动批处理,其中如果没有接力传递参数,%~1是为空值的。
参考 WHY大佬的代码,改了一下
  1. @FLTMC>nul || PowerShell "Start-Process CMD -Args '/c', '\"\"%~f0\"', '\"%~1\"\"' -Verb RunAs" && exit /b
  2. @echo off
  3. cd /d "%~dp0"
  4. echo "%~1"
  5. pause
复制代码

作者: cbbos    时间: 2024-10-19 21:17

回复 11# 77七
是在添加了 获取管理员权限的代码 之后


不是添加之后,这个代码一直用了的。不明白怎么就突然用不了了
作者: Five66    时间: 2024-10-19 23:50

调用管理员的

未调用管理员的
是不同的
之前能用或许原本就是管理员??
作者: cbbos    时间: 2024-10-20 10:06

回复 13# Five66


    不清楚,我的每个bat基本都加了这个管理员代码,就是突然间全部失效了,只有使用绝对路径的还能用




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2