Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查一个文件路径是否存在于另一个文件路径中?_Javascript_Node.js - Fatal编程技术网

Javascript 检查一个文件路径是否存在于另一个文件路径中?

Javascript 检查一个文件路径是否存在于另一个文件路径中?,javascript,node.js,Javascript,Node.js,假设我有以下2个路径名字符串(windows环境): 及 如何检查bin是否存在于roaming中?有没有办法得到一个布尔值,表示bin嵌套在roaming 注意:fs.exists()、existsSync()和access()都会根据当前的目录检查目录。我想在不更改当前目录的情况下检查指定的目录 注意2:替换%AppData%是一个优雅的解决方案,但我需要一个使用环境进行评估的解决方案,这样它也可以处理windows文件夹重定向之类的事情 示例:假设用户在windows 10上通过elect

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

如何检查
bin
是否存在于
roaming
中?有没有办法得到一个布尔值,表示
bin
嵌套在
roaming

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

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

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

%AppData%\SOME\u AppData\u文件夹\SOME\u存储库\

假设用户给了我这个文件夹(作为字符串存储在
文件\u var
):

D:\SOME\u NETWORK\u DRIVE\USER\u PROFILES\THIS\u USER\AppData\Roaming\SOME\u AppData\u FOLDER\SOME\u REPOSITORY\SOME\u DIRECTORY\SOME\u FILE.SOME\u EXTENSION

在这个特定的客户端上
%AppData%
的计算结果是
D:\SOME\u NETWORK\u DRIVE\USER\u PROFILES\this\u USER\AppData\Roaming

我想运行以下命令:

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

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

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

const roaming=String.raw`C:\Users\User\AppData\roaming`;
const bin=String.raw`%AppData%\.minecraft\bin`;
接下来,您应该使用来执行测试:

const fs=require(“fs”);
if(fs.existsSync(bin.replace(/%AppData%/,漫游)){
//目录存在
}否则{
//目录不存在
}

如果您可以确定特定的分隔符,如
\SOME\u APPDATA\u FOLDER\
,在本例中,您可以确定所需的文件路径,并根据
fs.access
对其进行测试(在本例中说明)

let delimiter=`\\SOME\u APPDATA\u FOLDER\\`,
repo\u var=`%AppData%\\SOME\u AppData\u文件夹\\ SOME\u存储库\\`,
文件\u var=`D:\\SOME\u网络\u驱动器\\用户\u配置文件\\ THIS\u用户\\AppData\\Roaming\\SOME\u AppData\u文件夹\\ SOME\u存储库\\ SOME\u目录\\ SOME\u文件。SOME\u扩展名`,
test_var=repo_var.substring(0,repo_var.indexOf(分隔符))
+file_var.substring(file_var.indexOf(分隔符))
console.log('将检查此文件',test\u var)
access(test_var、fs.constants.F_OK)
.然后(()=>{
log('file exists',test\u var)
}
.catch(()=>{
log('文件不存在',test\u var)
}

我喜欢你的解决方案,但是像文件同步和文件夹重定向这样的路径骗局呢?例如,假设本地
C:
驱动器上的
“我的文档”
文件夹被重定向到网络驱动器上嵌套良好的配置文件文件夹
D:
,我想检查文件的同步性
“我的文档\子文件夹\文件.EXT”
针对同一个文件,但在网络驱动器上。您只是想比较两个文件的内容吗?@ΔO'deltazero'否。它用于错误处理。我正在从nodejs运行
git
命令,使用
-C
选项(
git-C“C:\Users\User\AppData\Roaming”日志--follow-p--%AppData%\.minecraft\bin\somefile.json)
)在执行之前,我需要知道第一条路径中存在第二条路径,以避免向PowerShell发送错误的命令。很抱歉投了反对票,但您的问题不是很清楚。您到底想要实现什么(预期结果)?到目前为止,您尝试了什么?结果如何?@ΔO'deltazero'我不确定还有什么不清楚。没有什么可以尝试的。我在文档中知道的最接近的函数是fs.exists(),但它只检查一个文件是否存在,不检查它是否存在于另一个文件路径中。为什么不针对
fs.exists()测试这两个路径
access()
?@ΔO'deltazero'这两个选项都是根据当前目录检查文件。这不起作用。我需要对照第一个路径检查第二个路径,但仍然不清楚您到底想实现什么。发布更多代码和所需结果的示例。您所说的“当前”是什么意思目录?CWD在使用绝对路径时没有区别。
bin = `%AppData%\.minecraft\bin`
const { exec } = require( "child_process" );
exec( "git -C " + repo_var + " log --follow -p -- " + file_var )