Это работает независимо от того, содержит ли переменная строку или номер.
isNaN(num) // returns true if the variable does NOT contain a valid number
isNaN(123) // false
isNaN('123') // false
isNaN('1e10000') // false (This translates to Infinity, which is a number)
isNaN('foo') // true
isNaN('10px') // true
Конечно, вы можете это отрицать, если вам нужно. Например, чтобы реализовать пример IsNumeric
, который вы дали:
function isNumeric(num){
return !isNaN(num)
}
работает только в том случае, если только строка содержит числовые символы, иначе он возвращает NaN
.
+num // returns the numeric value of the string, or NaN
// if the string isn't purely numeric characters
+'12' // 12
+'12.' // 12
+'12..' // Nan
+'.12' // 0.12
+'..12' // Nan
+'foo' // NaN
+'12px' // NaN
полезно для преобразования «12px» в 12, например:
parseInt(num) // extracts a numeric value from the
// start of the string, or NaN.
parseInt('12') // 12
parseInt('aaa') // NaN
parseInt('12px') // 12
parseInt('foo2') // NaN These last two may be different
parseInt('12a5') // 12 from what you expected to see.
Имейте в виду, что, в отличие от +num
, parseInt
(как следует из названия) преобразует float в целое число, отрубив все после десятичной точки (если вы хотите использовать parseInt()
из-за этого поведения, вам, вероятно, лучше использовать другой метод вместо ):
+'12.345' // 12.345
parseInt(12.345) // 12
parseInt('12.345') // 12
Пустые строки могут быть немного противоречивыми. +num
преобразует пустые строки в ноль, а isNaN()
принимает одно и то же:
+'' // 0
isNaN('') // false
Но parseInt()
не согласен:
parseInt('') // NaN
Загрузите (свободный) Cygwin и используйте подобные Unix команды в командной строке Windows.
Ваш лучший выбор: sed
Использовать powershell в .bat - для Windows 7+
кодировка utf8 необязательна, подходит для веб-сайтов
@echo off
set ffile='myfile.txt'
set fold='FOO'
set fnew='BAR'
powershell -Command "(gc %ffile%) -replace %fold%, %fnew% | Out-File %ffile% -encoding utf8"
Это - одна вещь, которые обрабатывают сценарии в пакетном режиме, просто не преуспевает.
сценарий morechilli , связанный с, будет работать на некоторые файлы, но к сожалению он будет дросселировать на, которые содержат символы, такие как каналы и амперсанды.
VBScript является лучшим встроенным инструментом для этой задачи. См. эту статью для примера: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx
Взгляните на . Есть ли в этом вопросе какая-либо утилита, подобная sed для cmd.exe , которая запрашивает эквивалент sed в Windows. Краткое содержание:
Если Вы находитесь на версии Windows, которая поддерживает.Net 2.0, я заменил бы Вашу оболочку. PowerShell дает Вам полную мощность .NET из командной строки. Существует много commandlets, встроенные также. Пример ниже решит Ваш вопрос. Я использую полные имена команд, существуют более короткие псевдонимы, но это дает Вам что-то Google для.
(Get-Content test.txt) | ForEach-Object { $_ -replace "foo", "bar" } | Set-Content test2.txt
BatchSubstitute.bat
на dostips.com пример поиска и замены с помощью чистого пакетного файла.
Это использует комбинацию FOR
, FIND
и CALL SET
.
Строки, содержащие символы среди "&<>]|^
, можно рассматривать неправильно.
Я не думаю, что существует способ сделать это с любыми встроенными командами. Я предложил бы, чтобы Вы загрузили что-то как Gnuwin32 или UnxUtils и использовали sed
команда (или загрузили [только 115] sed
):
sed -c s/FOO/BAR/g filename
Может быть немного поздновато, но я часто ищу похожие вещи, так как не хочу пережить боль одобрения программного обеспечения.
Однако, вы обычно используете оператор FOR в различных формах. Кто-то создал полезный пакетный файл, который выполняет поиск и замену. Посмотрите здесь . Важно понимать ограничения предоставляемого пакетного файла. По этой причине я не копирую исходный код в этом ответе.
. Только что использованный FART (" F ind A nd R ] eplace T ext "служебная программа командной строки):
отличная маленькая бесплатная программа для замены текста в большом наборе файлов.
Файлы установки находятся на SourceForge .
Пример использования:
fart.exe -p -r -c -- C:\tools\perl-5.8.9\* @@APP_DIR@@ C:\tools
предварительный просмотр рекурсивных замен в файлах этого дистрибутива Perl.
Единственная проблема: значок веб-сайта FART не совсем со вкусом, изыскан или элегантен;)
Обновление 2017 г. (7 лет спустя) jagb указывает в комментариях к статья 2011 г. « Простой способ пердежа - поиск и замена текста » от Микаила Тунча
Вот решение, которое, как я обнаружил, работает на Win XP. В свой рабочий пакетный файл я включил следующее:
set value=new_value
:: Setup initial configuration
:: I use && as the delimiter in the file because it should not exist, thereby giving me the whole line
::
echo --> Setting configuration and properties.
for /f "tokens=* delims=&&" %%a in (config\config.txt) do (
call replace.bat "%%a" _KEY_ %value% config\temp.txt
)
del config\config.txt
rename config\temp.txt config.txt
Файл replace.bat
выглядит следующим образом. Я не нашел способа включить эту функцию в один и тот же командный файл, потому что переменная %% a
, кажется, всегда дает последнее значение в цикле for.
replace.bat
:
@echo off
:: This ensures the parameters are resolved prior to the internal variable
::
SetLocal EnableDelayedExpansion
:: Replaces Key Variables
::
:: Parameters:
:: %1 = Line to search for replacement
:: %2 = Key to replace
:: %3 = Value to replace key with
:: %4 = File in which to write the replacement
::
:: Read in line without the surrounding double quotes (use ~)
::
set line=%~1
:: Write line to specified file, replacing key (%2) with value (%3)
::
echo !line:%2=%3! >> %4
:: Restore delayed expansion
::
EndLocal
Команда Power shell работает как шарм
(
test.txt | ForEach-Object { $_ -replace "foo", "bar" } | Set-Content test2.txt
)