Arhn - архитектура программирования

Как записать нулевой символ ASCII (nul) в файл с помощью пакетного сценария Windows?

Я безуспешно пытаюсь записать нулевой символ ASCII (nul) в файл из пакетного сценария Windows. Сначала я пытался использовать echo следующим образом:

echo <Alt+2+5+6>

кажется, что это должно работать (ввод <Alt+2+5+6> в командном окне записывает нулевой символ - или ^@, как кажется), но echo затем выводит:

More?

и висит пока не нажму <Return>. В качестве альтернативы я попытался использовать:

copy con tmp.txt >nul
<Alt+2+5+6><Ctrl+Z>

который делает именно то, что мне нужно, но только если я наберу его вручную в командном окне. Если я запускаю его из командного файла, он зависает, пока я не нажму <Ctrl+Z>, но даже тогда выходной файл создается, но остается пустым.

Я действительно хочу, чтобы пакетный файл был автономным, не требуя (например) отдельного файла, содержащего нулевой символ, который можно скопировать при необходимости.


Ответы:


1

Ладно, это было сложно, и решение уродливое, но оно работает.

Вы можете использовать сам пакетный файл в качестве файла, содержащего нулевой символ, который нужно скопировать.

Этот пакетный файл с именем null.bat:

findstr /v /r \n null.bat >> myfile.txt
[NULL]

(где последняя строка содержит только нулевой символ) добавляет нулевой символ к myfile.txt.

findstr /v /r показывает все строки, которые не совпадают с регулярным выражением, то есть только последнюю, потому что нет символа новой строки.

Я пробовал несколько других вещей, но это было единственное, что я мог найти, что не удаляло нулевой символ.

Примечание. findstr впервые поставлялось с Windows 2000, поэтому может быть недоступно в предыдущих версиях Windows.

28.04.2010

2

Мне не нравится решение, которое не может быть простым копированием/вставкой в ​​текстовые файлы. Еще несколько способов:

1) mshta (можно использовать непосредственно в пакетном файле или из командной строки):

mshta vbscript:execute("CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write( Chr(00) ):Close")>testfile

2) certutil (требуется временный файл)

echo 00>null.hex
certutil -decodehex null.hex null.bin

3) makecab просто проверьте подпрограмму здесь - http://ss64.com/nt/syntax-genchr.html

31.01.2015
  • №1 отличное решение. В соответствующей заметке замените > на >>, чтобы добавить к существующему файлу. 07.03.2021

  • 3

    Вот статья, в которой описывается, как записывать произвольные байты с помощью пакетного файла (поиск для h2b.com). Это эффективно решает проблему записи любых непечатаемых данных с помощью пакетного скрипта (включая null).

    04.05.2010
  • Есть ли решение для 64-битной Windows? 25.08.2011

  • 4

    Альтернатива принятому ответу, которая не требует ввода нулевых символов в пакетный файл, выглядит следующим образом:

    @echo off
    
    set NULL_FILE=null.txt
    set DEBUG_COMMANDS=write-null.dbg
    
    echo e 100 >%DEBUG_COMMANDS%
    echo 0 >>%DEBUG_COMMANDS%
    echo n %NULL_FILE% >>%DEBUG_COMMANDS%
    echo rbx >>%DEBUG_COMMANDS%
    echo 0 >>%DEBUG_COMMANDS%
    echo rcx >>%DEBUG_COMMANDS%
    echo 1 >>%DEBUG_COMMANDS%
    echo w >>%DEBUG_COMMANDS%
    echo q >>%DEBUG_COMMANDS%
    
    debug < %DEBUG_COMMANDS% >nul
    
    del %DEBUG_COMMANDS%
    

    Это, очевидно, более многословно, а также имеет недостаток, заключающийся в том, что он не будет работать на машинах Win64 (из-за того, что debug больше не доступен в этих средах).

    29.04.2010

    5

    создать нулевой файл размера <size>:

    fsutil file createnew <file> <size>
    
    28.03.2021
  • Но это ответ на другой вопрос. Размер файла 0 - это другое, чем символ NUL внутри файла. 29.03.2021
  • Вопрос заключается в том, чтобы записать нулевой символ (nul) в файл, а не для размера файла 0. Символ NUL внутри файла имеет размер 1. OP не хочет, чтобы отдельный файл содержал нулевой символ, который можно скопировать при необходимости., как в случае genchr.cmd или аналогичного. 29.03.2021
  • Вы правы, раньше я не понимал правильное значение create null file of size <size> 29.03.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..