11
votes

Comment puis-je écrire un caractère NULL ASCII (NUL) à un fichier avec un script de lots Windows?

Je tente d'écrire un caractère ASCII NULL (NUL) à un fichier d'un script de lots Windows sans succès. J'ai initialement essayé d'utiliser echo comme ceci: xxx

qui semble être fonctionné (en tapant Dans la fenêtre de commande, écrivez un caractère nul - ou ^ @ tel qu'il apparaît), mais echo puis sortira: xxx < p> et bloque jusqu'à ce que j'appuie . Comme une alternative, j'ai essayé d'utiliser: xxx

ce dont j'ai besoin exactement, mais que si je le tape manuellement dans la fenêtre de commande. Si je l'exécute à partir d'un fichier de commandes, il se bloque jusqu'à ce que je appuyais sur mais même le fichier de sortie est créé mais reste vide.

Je veux vraiment le fichier de commandes Pour rester seul sans nécessiter (par exemple) un fichier séparé contenant un caractère nul pouvant être copié en cas de besoin.


0 commentaires

5 Réponses :


4
votes

D'accord, c'était difficile, et la solution est laide, mais cela fonctionne.

Vous pouvez utiliser le fichier de commandes lui-même comme le fichier contenant le caractère null à copier.

Ce fichier de commandes , appelé null.bat : xxx

(où la dernière ligne contient seul le caractère null ) ajoute le caractère null à myfile.txt .

Recherche / v / r affiche toutes les lignes qui ne sont pas assorties par la regex, c'est-à-dire que le dernier, car Il n'y a pas de caractère de nouvelle ligne.

J'ai essayé plusieurs autres choses, mais c'était le seul que je pouvais trouver que cela ne supprime pas le caractère null.

Note: < / strong> FindStr a été expédié pour la première fois avec Windows 2000, il peut ne pas être disponible sur des versions antérieures de Windows


0 commentaires

3
votes

Une alternative à la réponse acceptée qui ne nécessite pas de mettre des caractères nuls dans le fichier de commandes de lot est la suivante:

@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%


0 commentaires

4
votes

Voici un article qui décrit comment écrire des octets arbitraires avec un lot Fichier (recherche pour h2b.com ). Cela résout efficacement le problème de la rédaction de données non imprimables à l'aide d'un script de lot (y compris NULL).


1 commentaires

Y a-t-il une solution pour des fenêtres 64 bits?



5
votes

Je n'aime pas la solution qui ne peut pas être une copie facile / pâte-d sur des fichiers texte. Quelques façons:

1) mshta (peut être utilisé directement dans le fichier de lots ou à partir de la ligne de commande): xxx

2) certutil (nécessite un fichier temporaire) xxx

3) makecab Vérifiez le sous-programme ici - http: / /ss64.com/nt/ysyntax-genchr.html


1 commentaires

# 1 est une excellente solution. Sur une note connexe, remplacez > avec >> à Ajouter à un fichier existant.



2
votes

Créer un fichier NULL de taille : xxx


3 commentaires

Mais c'est une réponse à une autre question. Une taille de fichier de 0 est une autre chose qu'un caractère nul dans un fichier


La question est de demander d'écrire un "caractère nul (nul) à un fichier", pas pour une taille de fichier de 0. Un caractère NUL à l'intérieur d'un fichier est Taille 1. OP ne veut pas "un fichier séparé contenant un caractère null qui peut être copié en cas de besoin. ", comme dans le cas de Genchr.cmd ou similaire .


Vous avez raison, je n'ai pas compris la bonne signification de Créer un fichier NULL de taille avant