好的,这就是我到目前为止所得到的。 这意味着添加网站以阻止在hosts文件中,并允许用户在需要时删除条目。尝试添加要阻止的网站时,有时会创建一个新行,然后将条目放在该行之前。这不是我想要的。我希望它创建一个新行,然后在该行上添加条目。由于某些原因,它有时会起作用,而有时则根本不起作用。我收到一条错误消息,提示Find参数不正确。我正在使用“查找”命令来查看条目是否已在主机文件中。如果是这样,我希望它避免添加它。如果不是,那么我要添加它。当我尝试删除条目时,该批处理会崩溃,因此我不确定在这里我在做什么错。我正在尝试查找条目并将其替换为空白。我真正想做的是删除整行,这样我就不会出现很多空白行。 任何帮助是极大的赞赏。谢谢!
const multer = require('multer');
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });
router.post('/avatar/upload', upload.single('avatar'), async (req, res, next) => {
try {
console.log(req.body.avatar, 'req.body.avatar'); // { avatarUrl: '[object FileList]' } 'req.body'
console.log(req.files, 'request files'); // undefined
console.log(req.file, 'single file'); // undefined
return res.json({status: true});
} catch (err) {
return next(err);
}
});
答案 0 :(得分:3)
请注意,在引用website
文件的条目时,术语hosts
具有误导性。 hosts
文件的条目用于DNS主机名到IP地址的自定义映射,并且文件中存在的任何主机名不一定都承载网站。使用术语website
可能会导致错误的印象,即可以将http://www.example.com
之类的内容添加到主机文件中,这是不正确的。
如果主机文件中已存在主机,则跳过该主机:
使用find
时出现的问题是%BLOCKEDSITE%
有嵌入的空格,因此您应该用引号引起来并使用:
FIND /C /I "%BLOCKEDSITE%" %WINDIR%\system32\drivers\etc\hosts
但是它还有另一个问题:由于它依赖于%BLOCKEDSITE%
所要求的IP地址和主机名之间的确切间隔,因此仅适用于批处理文件添加的条目。另外,用户可能通过将#
放在包含该条目的行的开头来注释(禁用)该条目,即使该条目被禁用,您的批处理代码也将跳过添加主机。
这可以通过使用findstr
及其正则表达式语法来解决。例如:
findstr /IRC:"^ *127\.0\.0\.1 *example\.com *$" "%WINDIR%\system32\drivers\etc\hosts"
从主机文件中删除条目:
在FOR
循环中,您只需要跳过编写包含指定条目的行:
if "!Line!"=="!LINE:%BLOCKEDSITE%=!" echo(!Line!>>"%HOSTSFILE%"
但是它还是不准确,并且遇到了前面提到的跳过添加条目所遇到的相同问题。再次使用findstr
,您可以轻松删除包含不需要的条目的行:
findstr /VIRC:"^ *127\.0\.0\.1 *example\.com *$" "%HOSTSFILE%" > "%HOSTSFILE%.tmp"
del "%HOSTSFILE%"
ren "%HOSTSFILE%.tmp" "hosts"
有了上述要点,脚本可以像这样重写:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
title Modifying your HOSTS file
color F0
set "HOSTSFILE=%WINDIR%\system32\drivers\etc\hosts"
set "HOME=127.0.0.1"
set "PROMPT_TEXT=Enter the host name to"
set "ACTION_TEXT[1]=add"
set "ACTION_TEXT[2]=remove"
set "FindEmptyLine=^ *$"
set "NewLineAppended="
cls
setlocal EnableDelayedExpansion
:LOOP
echo,
echo 1. Block a host
echo 2. Remove a blocked host
echo 3. Exit
choice /C "123" /N /M "Choose an item [1, 2, 3]: "
set "Item=%errorlevel%"
goto choice%Item%
:choice0 // User Pressed CTRL-C
:choice3
exit /b
:choice1
call :Common
set "HostEntry=!HOME! !HOST!"
findstr /IRC:"!FindEntry!" "!HOSTSFILE!"> nul && (
echo The host !HOST! is already blocked, No action taken.
) || (
if not defined NewLineAppended (
REM This will append a new line ONLY if the file does not end by LF character
type "!HOSTSFILE!" | findstr $ > "!HOSTSFILE!.tmp" && (
del "!HOSTSFILE!"
ren "!HOSTSFILE!.tmp" "hosts"
set "NewLineAppended=1"
)
)
echo !HostEntry!>>"!HOSTSFILE!"
echo The host !HOST! blocked
)
goto LOOP
:choice2
call :Common
findstr /VIR /C:"!FindEntry!" /C:"!FindEmptyLine!" "!HOSTSFILE!">"!HOSTSFILE!.tmp" && (
del "!HOSTSFILE!"
ren "!HOSTSFILE!.tmp" "hosts"
echo The host !HOST! unblocked
)
goto LOOP
:Common
set "HOST="
set /P "HOST=!PROMPT_TEXT! !ACTION_TEXT[%Item%]! (e.g. example.com): "
if not defined HOST (
(goto)2>nul
goto LOOP
)
set "FindEntry=^^ *!HOME! *!HOST! *$"
set "FindEntry=!FindEntry:.=\.!"
exit /b