【问题标题】:batch cannot find path批处理找不到路径
【发布时间】:2016-04-25 00:14:13
【问题描述】:

我正在开发一款游戏,我只需要让游戏写入指定路径上的文件。

但每次我尝试都会收到诸如

之类的错误

“找不到指定的路径”

我已经尝试了 cd/ 和 path 和 dir 的所有组合以及兔耳没有兔耳和“\”等等,但没有解决这个错误。

但这也是一个要求,我不能指定完整路径。因为这是一个游戏。游戏的路径因电脑而异(也许),这意味着我希望它“搜索并找到”与代码中的内容匹配的路径。所以继承人我的代码。有什么想法吗?

   if exist cd "game\General_menus\users\%player%\programbase.dll" goto write
if not exist cd "game\General_menus\users\%player%\programbase.dll" goto addwrite


:write

echo %score%> cd "game\General_menus\users\%player%\playerdb.dll"

pause>nul

:addwrite

echo %score%>> cd "game\General_menus\users\%player%\playerdb.dll"

但是完整路径是:C:\Users\Kevin\Documents\Visual Studio 2015\Projects\game\game\General_menus\plugins

(但正如我所说。我希望它“检测未指定的其余路径)

编辑=============================================== =============================0

当前工作路径= C:\Users\Kevin\Documents\Visual Studio 2015\Projects\game\Hacker_game\General_menus\plugins

我希望将文件 playerdb.dll 写入路径: C:\Users\Kevin\Documents\Visual Studio 2015\Projects\game\Hacker_game\General_menus\users\%player%\playerdb.dll

无需手动将其锁定为 C 作为路径。 (就像它会检索路径信息,这就是我使用 %CD% 的原因)然后只需向上移动 1 个文件夹。然后进入 users\player 然后写入文件

它仍然无法正常工作:(

set path=%CD%

IF EXIST dir %path% /A:D(
    goto write
)else(
goto addwrite
)
cd users\%player%\playerdb.dll goto write
if not exist cd users\%player%\playerdb.dll goto addwrite


:write
echo %score%> "Hacker_game\General_menus\users\%player%\playerdb.dll"
pause>nul
:addwrite
echo %score%>> "Hacker_game\General_menus\users\%player%\playerdb.dll"

【问题讨论】:

  • if exist cd "game\General_menus\users\%player%\programbase.dll" goto write 该代码正在检查文件cd 是否存在。我假设你想删除 cd
  • 是的,我刚刚添加了 cd 和 cd/“路径”,我尝试了是否存在“路径”,我尝试了“如果存在路径”,我也尝试了更多的东西。但我发现没有任何效果。我试图在脚本开头“设置路径”。但没有任何效果:(而且我也需要检测部分。它还说,当写“如果存在 cd (path) 时它找不到我实际试图找到的路径。它没有包含 cd 部分。所以在我看来,这似乎可行。但你可能是对的。
  • 您的代码都不是有效的语法。我建议你从头开始,然后再试一次。
  • 整个代码本身完美运行。除了那部分。我让它在类似的脚本的不同部分工作。但由于某种原因它仍然无法在那里工作......我真的看不到错误,这就是为什么我在这里也许你们能够看到错误并可能告诉我(所以我可以学习它)
  • 如果这只是批处理文件的一部分,我们怎么知道它的另一部分不会影响这部分。你不能告诉我你已经复制了这段代码并且它在你的批处理文件的另一部分中工作:echo %score%> cd "game\General_menus\users\%player%\playerdb.dll"

标签: windows batch-file dll path


【解决方案1】:

批处理的问题在于它可能非常.. 对某些事情很挑剔,例如路径需要是完整路径,否则您会收到错误。也许您可以尝试将游戏文件放在桌面上的文件夹中?(尽管如果您使用 Visual Studio 制作此游戏,则必须更改 Visual Studio 的“查找”文件。

虽然你可以做的是,而不是试图'>'/'>>' var score 到指定的路径使用 if 语句来检查文件是否存在。

如果是,则将 var 写入其中,如果未创建文件,则对其进行写入。

这是我为测试它而编写的 .bat:

@ECHO OFF
::input your game folder path 
set path=C:\Users\Zachary\Desktop\testreceive.txt
::file to write to
set file=testreceive.txt
::var to write
set score=kappa

IF EXIST cd %path%(
    goto :output1
)else(
goto :output2
)


:output1
echo %score% > %file%
goto:EOF

:output2
break > "d:\testing\dblank.txt"
echo %score% > %file%
goto:EOF

请记住,以上内容并不完美,我仍在自己学习批处理 xD,这是一项紧急工作,所以它有一个错误(它会打开您正在写入的文件),但希望它会让你知道该怎么做。

编辑:

我之前很着急,但这里有一种潜在的方法可以绕过“硬编码”路径,下载后会更改。

@ECHO OFF
::file to write to
set file=testreceive.txt
::var to write
set score=kappa

::get things started
goto :reset

:reset
cls
echo Input the full path to [file-name]  
set /p path=
::hopefully put some error-checking here to see if the input matches the path

IF %path%==%pathcheck%(
     goto :logic
)else( 
    goto :reset
)

:output1
echo %score% > %file%
goto:EOF

:output2
break>"d:\testing\dblank.txt"
echo %score% > %file%
goto:EOF

:logic
IF EXIST cd %path%(
    goto :output1
)else(
goto :output2
)

这将解决文件中目录与实际目录不同的任何可能性

EDIT2:(希望是最后一个)

经过一番折腾后,我发现了一些关于 dir 命令的信息

@ECHO OFF
::input your game folder path 
set path=senpai
::file to write to



IF EXIST dir %path% /A:D(
    goto :output1
)else(
goto :output2
)


:output1
echo yay senpai noticed me!
pause
goto:EOF

:output2
echo boo senpai didnt notice me ;-;
pause
goto:EOF

有关目录的更多信息可以在这里找到:http://ss64.com/nt/dir.html

/A:D 部分指定您检查的文件夹是什么(至少我理解它的反面是 /A:-D(不是文件夹)

EDIT3:

尝试改变:

echo %score%>

到:

echo %score% > 

还要检查文件是否知道 %player% 中的内容。 使用:

echo player:%player%
 pause

在文件的开头。 如果该 var 为空,则会导致错误。 这是最后想到会导致它无法工作的事情

【讨论】:

  • 问题是我不应该真的需要完整路径,只要它要搜索的所有内容都在同一个主目录下。我有 1 个名为 main 的主目录,然后我有子文件夹,例如 game_missions、任务、工具等。假设主脚本从主文件夹运行,然后我希望它等从工具文件夹中调用某些内容并写入 game_mission 文件夹作为一个例子。我让它只在主文件夹中的子文件夹中运行。所以无论我将主文件夹移动到哪里,它都会继续工作,因为它会搜索 this
  • 这是必须的。以确保如果主文件夹由于某种原因被移动,它不会在将来造成任何错误。所以这是我的问题。我可以在您的脚本中看到您的解决方案将起作用。但随后它取决于文件被固定到确切的位置。我 99% 肯定我努力实现的目标是可能的。但由于某种原因,我无法弄清楚:(
  • C:\Program Files\Database\DBASE.EXE 根目录是“C:\”部分。 “程序文件”是下一个级别。 “数据库”是“程序文件”下的子目录,“DBASE.EXE”是实际文件名。我早些时候很着急,但在我离开之前我已经想到了一种解决方法..让我将它附加到答案中
  • 仍然没有让它工作:/我更新了主帖子,这样你就可以看到完整的代码以及更改和更好的解释......我只是不明白......这个任务应该这么简单xDD,但我根本想不通-.-
  • 不,仍然没有工作 :( 是的,我确实检查了 %player% (这是我做的第一件事。我已经回应了路径,看看它是否改变了,但仍然没有结果......该死的为什么这么多车-.-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多