首页 > 解决方案 > 检查一个文件路径是否存在于另一个文件路径中?

问题描述

假设我有以下 2 个路径名字符串(Windows 环境):

roaming = `C:\Users\User\AppData\Roaming\.minecraft\`

bin = `%AppData%\.minecraft\bin`

如何检查bin内部是否存在roaming有没有办法获得一个布尔值,说它bin嵌套在roaming

注意: fs.exists()、existsSync() 和 access() 都会根据当前目录检查目录。我想在不更改当前目录的情况下检查指定目录

注意 2:替换%AppData%是一种优雅的解决方案,但我需要一个使用环境进行评估的解决方案,因此它也可以处理诸如 windows 文件夹重定向之类的事情。

示例:假设用户通过 windows 10 上的 electronjs 中的 html 输入给我这个存储库路径(不寻找 windows/electron 特定的答案,只是一个示例)(作为字符串存储在 中repo_var):

%AppData%\SOME_APPDATA_FOLDER\SOME_REPOSITORY\

假设用户然后给了我这个文件夹(存储为字符串file_var):

D:\SOME_NETWORK_DRIVE\USER_PROFILES\THIS_USER\AppData\Roaming\SOME_APPDATA_FOLDER\SOME_REPOSITORY\SOME_DIRECTORY\SOME_FILE.SOME_EXTENSION

在此特定客户端%AppData%上评估为D:\SOME_NETWORK_DRIVE\USER_PROFILES\THIS_USER\AppData\RoamingPowerShell

我想运行这个:

const { exec } = require( "child_process" );
exec( "git -C " + repo_var + " log --follow -p -- " + file_var )

我想确保 file_var 是存储库(repo_var)中的一个文件,然后在 powershell 中运行该 shell 命令(来自 nodejs)以避免从主机环境运行错误命令(本例中的 POWERSHELL)

标签: javascriptnode.js

解决方案


首先,您应该使用String.raw这样反斜杠就不会被擦除:

const roaming = String.raw`C:\Users\User\AppData\Roaming`;
const bin = String.raw`%AppData%\.minecraft\bin`;

接下来,您应该使用fs.existsSync来进行测试:

const fs = require("fs");
if (fs.existsSync(bin.replace(/%AppData%/, roaming)) {
    // directory exists
} else {
    // directory doesn't exist
}

推荐阅读