[英]Check if one file path exists inside another?
假设我有以下 2 个路径名字符串(windows 环境):
roaming = `C:\Users\User\AppData\Roaming\.minecraft\`
和
bin = `%AppData%\.minecraft\bin`
如何检查 有没有办法获得一个布尔值,表示roaming
是否存在bin
?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\\Roaming
in PowerShell
我想运行这个:
const { exec } = require( "child_process" );
exec( "git -C " + repo_var + " log --follow -p -- " + file_var )
在 powershell 中运行该 shell 命令(来自 nodejs)之前,我想确保 file_var 是存储库(repo_var)中的一个文件,以避免在主机环境中运行错误命令(本示例中的 POWERSHELL)
首先,您应该使用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
}
如果您可以确定特定的分隔符,例如本例中的\\SOME_APPDATA_FOLDER\\
,则可以确定所需的文件路径并针对fs.access
对其进行fs.access
(在此示例中已承诺)。
let delimiter = `\\SOME_APPDATA_FOLDER\\`,
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`,
test_var = repo_var.substring(0, repo_var.indexOf(delimiter))
+ file_var.substring(file_var.indexOf(delimiter))
console.log('this file will be checked', test_var)
fs.promises.access(test_var, fs.constants.F_OK)
.then(() => {
console.log('file exists', test_var)
}
.catch(() => {
console.log('file doesn\'t exist', test_var)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.