无忧启动论坛

标题: 一个打开文件夹的bat命令在系统中能够正常执行,在主板DOS中不能正常执行。 [打印本页]

作者: 有阴也有阳    时间: 2017-9-16 10:51
标题: 一个打开文件夹的bat命令在系统中能够正常执行,在主板DOS中不能正常执行。
        一个打开文件夹的bat命令在系统中能够正常执行,在主板DOS中不能正常执行。

        打开bat所在驱动器里面的sysiso文件夹:

start %~d0\sysiso\


        在主板DOS中运行的报错如下:




        而在系统中则能正常执行:




        请高手指教,谢谢!!!

作者: fjzjk    时间: 2017-9-16 10:59
dos里应该用cd来进入文件夹吧
作者: nttwqz    时间: 2017-9-16 11:02
不要动不动就DOS,这个应该是PE下的命令提示符。

可以尝试

start "" %~d0\sysiso\

explorer.exe %~d0\sysiso\
作者: 有阴也有阳    时间: 2017-9-16 11:03
fjzjk 发表于 2017-9-16 10:59
dos里应该用cd来进入文件夹吧

改成:

cd %~d0\sysiso\


对吗?

作者: 音乐与电脑    时间: 2017-9-16 11:09
dos里又没有explorer 当然不能打开文件夹咯
作者: 有阴也有阳    时间: 2017-9-16 11:15
nttwqz 发表于 2017-9-16 11:02
不要动不动就DOS,这个应该是PE下的命令提示符。

可以尝试

        以上2条命令在系统下都可以成功执行,但在PE下的命令提示符中都无法执行。
作者: nttwqz    时间: 2017-9-16 11:40
有阴也有阳 发表于 2017-9-16 11:15
以上2条命令在系统下都可以成功执行,但在PE下的命令提示符中都无法执行。

哦,忘了,还以为你已经编好批处理了呢

%~d0指的是批处理所在的分区盘符,cmd下面是输入是无效的!只能使用绝对路径!

还有个情况,我才你应该是这种情况!你的PE是原生的,不带explorer.exe,文件夹自然是无法打开的!!!所以该提示并没有错!!!!
作者: 窄口牛    时间: 2017-9-16 11:44
本帖最后由 窄口牛 于 2017-9-16 11:45 编辑

cd /d d:\sysiso
作者: tools241    时间: 2017-9-16 12:18
@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%\
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set drive=%%i:
%drive%
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set directory=%%j
cd %directory%


start %~d0\sysiso\
作者: tools241    时间: 2017-9-16 12:18
@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%\
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set drive=%%i:
%drive%
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set directory=%%j
cd %directory%


start %~d0\sysiso\
作者: tools241    时间: 2017-9-16 12:20
本帖最后由 tools241 于 2017-9-16 19:13 编辑

@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%\
REM 上列4行的写法 "不论资料夹是否含空格" 皆适用
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set drive=%%i:
%drive%
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set directory=%%j
cd %directory%
REM 上列4行的写法在Windows以系统管理员身份执行时,可自 %WinDir%\sys????? 回到程式本身的正确位置

start %drive%\sysiso\
作者: 有阴也有阳    时间: 2017-9-16 12:42
tools241 发表于 2017-9-16 12:20
@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%

        谢谢!还是相同的报错:


作者: 有阴也有阳    时间: 2017-9-16 12:43
nttwqz 发表于 2017-9-16 11:40
哦,忘了,还以为你已经编好批处理了呢

%~d0指的是批处理所在的分区盘符,cmd下面是输入是无效的!只 ...

是运行批处理,不是在PE的CMD下输入命令。
作者: tools241    时间: 2017-9-16 12:45
本帖最后由 tools241 于 2017-9-16 19:13 编辑
有阴也有阳 发表于 2017-9-16 12:42
谢谢!还是相同的报错:

start 后面通常是 *.exe
改成


@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%\
REM 上列4行的写法 "不论资料夹是否含空格" 皆适用
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set drive=%%i:
%drive%
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set directory=%%j
cd %directory%
REM 上列4行的写法在Windows以系统管理员身份执行时,可自 %WinDir%\sys????? 回到程式本身的正确位置

cd %drive%\sysiso
作者: 邪恶海盗    时间: 2017-9-16 13:38
不能直接从当前文件夹访问其它文件夹,必需先切换到目标文件夹...
作者: 807979023    时间: 2017-9-16 14:09
换个pe吧,我这里03 7 8 都能运行批处理: start %~d0\sysiso


03pe.jpg (32.46 KB, 下载次数: 141)

03pe

03pe

7pe.jpg (31.96 KB, 下载次数: 153)

7pe

7pe

8pe.jpg (33.84 KB, 下载次数: 118)

8pe

8pe

作者: nttwqz    时间: 2017-9-16 14:35
807979023 发表于 2017-9-16 14:09
换个pe吧,我这里03 7 8 都能运行批处理: start %~d0\sysiso

我怀疑他的WinPE里面极有可能就没有explore,所以他这个如果是想通过start打开相关文件夹而不是在脚本里面切换到该文件夹根本就是做不到!!
作者: 窄口牛    时间: 2017-9-16 14:47
是的,所以我才用的命令。
作者: nttwqz    时间: 2017-9-16 14:47
tools241 发表于 2017-9-16 12:20
@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%

你能解释下你的批处理吗?

这个和下面的有何不同?
  1. @explorer.exe %~d0
复制代码

作者: nttwqz    时间: 2017-9-16 14:56
邪恶海盗 发表于 2017-9-16 13:38
不能直接从当前文件夹访问其它文件夹,必需先切换到目标文件夹...


作者: 邪恶海盗    时间: 2017-9-16 15:23
nttwqz 发表于 2017-9-16 14:56

你这个是访问当前目录子目录,这是没问题的
作者: nttwqz    时间: 2017-9-16 16:08
邪恶海盗 发表于 2017-9-16 15:23
你这个是访问当前目录子目录,这是没问题的


作者: tools241    时间: 2017-9-16 19:17
nttwqz 发表于 2017-9-16 14:47
你能解释下你的批处理吗?

@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%
FOR /f "delims=" %%I in ("%Var0%") do Set TP=%%~dpI
SET TP=%TP:~0,-1%\
REM 上列4行的写法 "不论文件夹是否含空格" 皆适用
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set drive=%%i:
%drive%
for /f "tokens=1,2 delims=:" %%i in ("%TP%") do set directory=%%j
cd %directory%
REM 上列4行的写法在Windows以系统管理员身份执行时,可自 %WinDir%\sys????? 回到程式本身的正确位置

____________________________________

本人打包了很多工具, 含添加到PE中的工具皆采用上列的写法以保万无一失
效率极致!  简体/繁体 10PE16199x64 10PE15063x86 10PE15063x64  影音上网版 ==>
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=385866


作者: nttwqz    时间: 2017-9-16 20:55
tools241 发表于 2017-9-16 19:17
@echo off
SET Var0=%0
IF '^%Var0:~0,1%'=='^"' SET Var0=%Var0:~1,-1%

批处理在带有空格的路径下以管理员身份运行时,切换到本身所在目录???

pushd %~dp0\

一句搞定!
作者: tools241    时间: 2017-9-16 21:22
本帖最后由 tools241 于 2017-9-16 21:37 编辑
nttwqz 发表于 2017-9-16 20:55
批处理在带有空格的路径下以管理员身份运行时,切换到本身所在目录???

pushd %~dp0\

除了回到原位, 通常后续会用到 目前所在的 drive 及 directory, 或完整的 PATH,
所以写法上有所不同.

看得出来大大对批处理很有研究, 本人早期使用Unix,
所以有些批处理的思考模式倾向使用( 由Linux 移植到Windows 的 ) "仿Linux/Unix" 命令 来解决,
有兴趣可参考:
如何利用 仿unix/linux命令 sed 一次替换文字中的 "某些相似性的字串" ==>
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=383106




作者: nttwqz    时间: 2017-9-17 00:20
tools241 发表于 2017-9-16 21:22
除了回到原位, 通常后续会用到 目前所在的 drive 及 directory, 或完整的 PATH,
所以写法上有所不同.

...

现在有转到Windows的阵营了?

话说,我还有转到Linux阵营的想法呢……
作者: 窄口牛    时间: 2017-9-17 07:28
win下的ps也很强大,不比移植的linux差很多




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