【问题标题】:How to change directory from a C program so that when the program finishes the change is still preserved? [duplicate]如何从 C 程序更改目录,以便在程序完成时仍保留更改? [复制]
【发布时间】:2013-04-02 21:47:32
【问题描述】:

我正在编写一个类似于“cd”命令但使用快捷方式的程序。

(保存路径:cds -s 1 C:\saved\directory\path) (切换到保存的路径:cds 1)

为此,我尝试了 chdir() 和 system(),但效果只在程序运行时持续。一旦程序终止,路径就会恢复到程序运行之前的状态。我目前正在使用一种解决方法,方法是使用一个 bat 文件加载我的程序,该文件运行另一个由程序创建的 bat 文件(包含 cd 命令)。

所以我的 bat 文件类似于:

cds.exe %1 %2 %3
C:\temp\cds_cmd.bat
del C:\temp\cds_cmd.bat

cds_cmd.bat 由 cds.exe 生成

我真的很想知道是否有任何其他方法可以在不使用 bat 文件的情况下做到这一点。

我找到并阅读了Is there any way to change directory using C language?,但没有找到我要找的东西。

【问题讨论】:

  • 在您已链接到的问题上查看已接受答案的 cmets - 他们解释了为什么您不能这样做。
  • 您可以通过在 C .exe 中设置诸如 CD_PATH 之类的环境变量将其缩减为一个批处理文件,然后将 cds_cmd.bat 替换为 cd %CD_PATH%
  • 谢谢 Fuzzy,这将是一个比我目前拥有的解决方案更好的解决方案,但它似乎有一个类似于我原来的问题 stackoverflow.com/questions/3416638/…
  • 我还没有尝试过,但我想知道你是否可以让你的 C prog 调用另一个旨在设置环境的批处理文件。变种。使用 SetX? (stackoverflow.com/questions/3803581/…) 即有一个setvar.bat 包含类似setx %1=%2 的东西,你的C prog 会默默地调用CD_PATHC:\somepath 作为参数?值得玩吗? :)
  • 另外,我以前使用的一个技巧是在批处理文件运行时重写它:) ....我的批处理文件称为 Turbo Pascal prog,它重写了同一个批处理文件,因为它被 DOS 解释了一半,并且 pascal .com 添加了它需要添加的内容。如果新批次的大小与旧批次的大小不同到需要获取下一行的程度,DOS 会有点不高兴,因此诀窍是填充内容,以便相同的命令始终在同一个地方.最后效果很好!

标签: c batch-file directory executable


【解决方案1】:

这不是您的 C 问题的答案,而是仅使用 Batch 的替代解决方案:

保存路径:

set 1=C:\saved\directory\path

切换到保存的路径:

cd %1%

如果您愿意,您可以为此目的使用不同的变量名(不是数字)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 2017-03-14
    • 2011-04-04
    • 1970-01-01
    • 2015-02-22
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多