【问题标题】:How do I find a hidden folder using batch?如何使用批处理查找隐藏文件夹?
【发布时间】:2013-03-13 12:04:49
【问题描述】:

我正在尝试制作一个可以找到并重置您的 Minecraft 的 Minecraft 批处理程序。问题是,我要发布它,每个人都会有不同的用户名,并不是所有的人都会有 Vista+ 和C:\Users\Username 下的用户。有些人会把它放在C:\Documents and Settings\Username 或类似的地方。

这是我已有的代码。

@Echo off
set UserProfile = Jackson
set Find = Desktop
pause
FOR /D %%Find in ("C:\Users\%UserProfile%\") DO pause

这就是我所拥有的。显然这是错误的,但我需要一些帮助。是的,我知道如果我要走那条路,上面应该是set /p UserProfile = Insert username here,但我有它用于测试。我就是无法让FOR 工作。我使用了错误的命令吗?我一直在尝试研究它,但找不到有效的解决方案。提前感谢您的帮助!

附:如果你不知道隐藏文件夹我会寻找它的C:\Users\Username\Appdata\Roaming\.minecraft

我在执行 FOR 时一直遇到这个问题。即使在暂停的情况下,它也会关闭 cmd 窗口。如果我在没有批处理脚本的情况下手动执行(输出到 cmd.exe),那么它会显示 %%Find was unexpected at this time. 我该如何解决?

【问题讨论】:

  • 其他用户脚本失败的原因是因为他们假设您将它们放入批处理脚本,而不是命令提示符。只需删除一个百分号..
  • @ProfPickle 能否请您发布代码。我对新批次的东西不感兴趣。我正在把它放到一个批处理脚本中,正如你从代码行中看到的那样,我说“我要发布它,每个人都会有不同的用户名”
  • 如果您在提示符下直接执行FOR 命令,则正确语法为for ... %v in ... 如果您将FOR 作为批处理文件的一行执行,则语法为@987654331 @。对元变量(循环控制变量 - 在这种情况下为 v)的任何引用都必须遵循此规则 - 从提示符,单个 % 和批处理文件中,%%。元变量只能是单个字母并且区分大小写。

标签: batch-file hidden directory minecraft


【解决方案1】:

实际上,您只需要%APPDATA% 环境变量。它可以在 XP、Vista、7 或 8 上运行(我敢说可能是 Windows NT 和 2000)。 %APPDATA%\.minecraft 将在 Vista+ 上转换为 c:\users\<username>\appdata\roaming\.minecraft,或在 XP- 上转换为 c:\documents and settings\<username>\application data\.minecraft

所以,只要在需要引用.minecraft 文件夹的地方使用%APPDATA%\.minecraft(可能被引用)即可。

有关更多有用的系统变量名称,请参阅Windows Environment Variables 上的此页面。

【讨论】:

  • 我在执行 FOR 时一直遇到这个问题。即使在暂停的情况下,它也会关闭 cmd 窗口。如果我在没有批处理脚本的情况下手动执行(输出到 cmd.exe),那么它会显示%%Find was unexpected at this time。我该如何解决?
  • @JacksonML:循环变量名称不能由多个字母组成。它应该是前缀(批处理文件中的%% 和命令提示符下的%)后跟一个字符(通常是字母,但也可以使用数字,以及一些非字母数字字符)。跨度>
  • @JacksonML - 什么法式吐司? %APPDATA% 怎么不能解决你所有的问题?为什么你仍然坚持使用for 循环?您是说 minecraft 文件夹可能位于 %APPDATA%\.minecraft 以外的某个位置,还是您想在其中找到子目录?如果有,是什么子目录?
  • @JacksonML:支持 rojo 所说的话。我只是在您的评论中解决直接问题,并没有意识到这个问题(很可能)不再需要循环。只需按照此答案中的建议使用%APPDATA%\.minecraft
  • @rogo 我不知道。我的意思是有时人们可以将它存储在其他地方,但这并不重要。我会将此标记为已回答,但 Andriy 你回答了一个没有被问到的问题。这对我将来会有帮助。
【解决方案2】:

试试这个

FOR /D %%F in ('dir/a C:\Users\%UserProfile%\') DO echo %%F 

【讨论】:

  • 在上面的答案中发布了同样的问题
  • 刮掉那条评论,它不会让我删除它。
  • 正如所写,这是行不通的。您可能打算将FOR /D 更改为FOR /F。另一个问题是dir 命令。首先,开关应该是/ad,而不仅仅是/a。此外,最好添加/b 开关以便dir 只返回名称。最后,USERPROFILE 环境变量保存了用户目录的完整路径。因此,您不能只是将其附加到另一条路径。 (事实上​​,你可以单独使用它。)
  • 糟糕,我一开始没有注意到UserProfile 被 OP 重新使用,所以请忽略我的最后一点。不过,我的其余评论仍然有效。
【解决方案3】:
for /f "delims=" %%i in ( ' dir /b /ah /ad /s \.minecraft ' ) do set target=%%i
echo %target%

其中 \ 是您开始搜索的目录。

【讨论】:

  • 和上面一样的问题,但是它说 `%%i 在这个时候是出乎意料的。
【解决方案4】:

感谢大家的回答!我发现(感谢@AndriyM)你只能在 %% 之后使用 1 个字母。那是我的问题,因为我正在尝试执行 %%Find 并且我必须执行 %%F 并更改变量。谢谢大家帮忙!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 2016-08-21
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多