您现在的位置是:首页 >技术教程 >windows redis配置文件使用powershell脚本修改遇到的问题网站首页技术教程
windows redis配置文件使用powershell脚本修改遇到的问题
问题说明
windows系统下redis安装完成之后,需要利用powershell脚本自动取修改配置文件启用密码。
设置完成之后发现识别不到设置密码
根本原因
原因是使用powershell修改密码之后存储的文件格式变成windows下的格式了, 而默认的配置文件,是需要unix文件格式的
确认问题的方法
用到的工具: winmerge
下载地址 WinMerge - You will see the difference…
是开源的项目哦 ,使用起来也很方便
通过文件对比的功能,查看修改之前的和修改之后的配置文件,可以看到内容除掉密码相关配置外外完全一样,但是编码方式是不一样的
处理办法
参考链接 Windows命令转换Unix行尾?答案 - 爱码网 (likecs.com)
我选择的是方案4,用起来很方便,直接贴到脚本中即可
【解决方案1】:
这实际上可以使用包含在 Windows NT 和更高版本中的more
命令非常容易地完成。要将包含 UNIX EOL(行尾)
的 input_filename
转换为包含 Windows EOL
的 output_filename
,只需执行以下操作:
TYPE input_filename | MORE /P > output_filename
more
命令具有您可能不知道的其他格式选项。运行more/?
以了解more
还能做什么。
【解决方案2】:
使用unix2dos 实用程序。您可以下载二进制文件here。
【讨论】:
-
再次,它只是记事本++的替代品。不会真正让这个自动化。我将不得不运行这个工具。到目前为止,我确实更改了 notepad++ 中的行尾。
-
它是一个命令行工具。它更适合自动化,然后是 GUI 工具。您可以编写一个定期的
at
作业,它会过滤您放置批处理文件的某个文件夹中的所有文件。这完全取决于您所说的自动化是什么意思。
【解决方案3】:
我正在处理 CRLF
问题,所以我决定构建非常简单的转换工具(在 NodeJS 中):
所以如果你安装了 NodeJS 和 npm,你可以试试:
npm i -g eol-converter-cli
eolConverter crlf "**/*.{txt,js,java,etc}"
可以使用 Glob 正则表达式(与 shell 中的正则表达式相同)动态配置路径。
因此,如果您可以使用 NodeJS,那真的很简单,您可以集成此命令将整个工作区转换为所需的行尾。
【讨论】:
【解决方案4】:
您无需使用 VBScript 中的其他工具即可做到这一点:
Do Until WScript.StdIn.AtEndOfStream
WScript.StdOut.WriteLine WScript.StdIn.ReadLine
Loop
将以上几行放入一个文件unix2dos.vbs
并像这样运行它:
cscript //NoLogo unix2dos.vbs <C:path oinput.txt >C:path ooutput.txt
或者像这样:
type C:path oinput.txt | cscript //NoLogo unix2dos.vbs >C:path ooutput.txt
您也可以在 PowerShell 中执行此操作:
(Get-Content "C:path oinput.txt") -replace "`n", "`r`n" |
Set-Content "C:path ooutput.txt"
可以进一步简化为:
(Get-Content "C:path oinput.txt") | Set-Content "C:path ooutput.txt"
上述语句无需显式替换即可工作,因为Get-Content
在任何类型的换行符(CR、LF 和 CR-LF)处隐式拆分输入文件,而Set-Content
将输入数组与 Windows 换行符(CR- LF) 在将其写入文件之前。
【解决方案5】:
Windows 的 MORE 不可靠,它不可避免地会破坏 TAB 并添加行。
unix2dos 也是 MinGW/MSYS、Cygutils、GnuWin32 和其他 unix 二进制端口集合的一部分 - 并且可能已经安装。
当python 存在时,这一行将任何行尾转换为当前平台 - 在任何平台上:
TYPE UNIXFILE.EXT | python -c "import sys; sys.stdout.write(sys.stdin.read())" > MYPLATFILE.EXT
或
python -c "import sys; sys.stdout.write(open(sys.argv[1]).read())" UNIXFILE.EXT > MYPLATFILE.EXT
或根据您的平台将单行代码放入 .bat / shell 脚本并放在 PATH 上:
@REM This is any2here.bat
python -c "import sys; sys.stdout.write(open(sys.argv[1]).read())" %1
并像使用该工具
any2here UNIXFILE.EXT > MYPLATFILE.EXT
等等,作者真厉害,竟然有这么多的方案