Il file batch semplice ha esito negativo su Windows Server 2012


0

Su un server Windows 2012, da un amministratore connesso (locale e di dominio), è stato creato un file batch "test.bat" reindirizzando l'input della console in un file:

echo Hello

Quando eseguito dal prompt cmd di PowerShell come .\test.bat, echeggia:

'■e' is not recognized as an internal or external command,

Il file batch si trova nella directory C: \ users \% username%% dell'utente che ha effettuato l'accesso.

Il file è stato creato dalla console, quindi:

echo "echo Hello" > test.bat

e poi modificato con Blocco note. Sembrava a posto in Blocco note ... niente di insolito.

Qualche idea su cosa sta succedendo?

MODIFICATO:

Per suggerimento, ho modificato l'input della riga di comando per rimuovere le virgolette. Pertanto, è stato immesso il comando in questo modo: echo echo Yowzer > test.bat Eseguito come: .\test.bate ottenuto la stessa risposta di cui sopra. Si noti inoltre che se modifico in Blocco note il test.bat sopra (ovvero creato alla riga cmd) e rieseguo, restituisce comunque una risposta di immondizia. Tuttavia, se creo / salvo il file in Blocco note dall'inizio, funziona correttamente.

Qualcuno può duplicare questo?


"C: \ Users \% username%" ?? non in subdir come i documenti? hai inserito nella cartella che contiene il file bat e quindi eseguito ". \ test bat"? E lo stai eseguendo da una console Poweshell, giusto?
Logman,

Il file bat è stato creato ed eseguito da C: \ subdir. Per creare il file bat sono stati utilizzati due metodi: (1) echo stuff > bat.batdalla tastiera e (2) scrivere in Notepad ++ e salvare come file bat. Tutta l'attività del prompt cmd è stata eseguita da una console PoSH.
user340089,

-1 per aver abbandonato la domanda, diminuendo così il suo valore
barlop

Risposte:


1

Sembra che il reindirizzamento >abbia codificato il tuo file batch in Unicode, quando dovrebbe essere ASCII. In Powershell, utilizzare Out-Fileinvece del reindirizzamento in questo modo:

"echo test" | Out-File test.bat -Encoding ascii

L'esecuzione del file batch dopo la seguente codifica riprodurrà l'errore:

"echo test" | Out-File test.bat -Encoding unicode

1

Aveva lo stesso problema, pensavo fossi pazzo.

Crea il tuo file batch su un altro computer. Ho avuto lo stesso problema aprendo Blocco note e digitando i comandi normalmente. Mi ha sempre dato lo stesso messaggio. Una volta ricreato il file batch (non copiare il vecchio file) sul mio dispositivo Win7 locale, copiato di nuovo sul mio server Win 2012R2, ha funzionato come un campione.


Non ho idea del perché, ma questo ha funzionato per me in una situazione simile.
boot13

0

Molto probabilmente hai qualche personaggio divertente da qualche parte. Sono abbastanza sicuro che se lo fai xxd -p blah.bat, vedrai alcuni personaggi divertenti nel tuo file batch.

Potresti quindi pensare a come sono arrivati ​​lì e rimuoverli .. E questo può essere fatto con xxd e sed. O forse in un altro modo, se sai quali personaggi sono.

È possibile ottenere xxd scaricando VIM 7.X o da cygwin

Oppure potresti trovare un editor esadecimale e inserire il file batch nell'editor esadecimale.

Dici che stai creando il file batch da stdin .. Beh, potresti approfondire con precisione cosa intendi con questo, ad esempio intendi copy con blah.batallora CTRL-Z? Ma qualunque cosa tu voglia dire, sta inserendo alcuni caratteri divertenti nel file.

aggiunto

Vedo che dichiari di averlo fatto con eco e reindirizzamento ..

Puoi semplificarlo facilmente per una risoluzione dei problemi

Provare type blah.bat

se mostra un personaggio divertente, allora prova a echo H>blah.batcostruirlo fino a quello che hai digitato .. e vedi a che punto ottieni il personaggio divertente.

Un'altra cosa da sperimentare è la codifica di input e output

prova chcp. chcp 850 e chcp 65001 e vedi se vedi delle differenze. chcp cambierà sia la codifica di input che di output, ma chcp mostrerà solo la codifica di input.

Se guardi la mia risposta qui https://stackoverflow.com/questions/30904504/font-is-right-why-cant-i-get-this-unicode-character-to-display-in-this-c-sharp / 32418703 # 32418703 vedi un programma chiamato chcpa che ho scritto qualche tempo fa, e puoi usarlo per cambiare le codifiche di input e output in modo più flessibile rispetto a chcp. Oppure potresti semplicemente usare chcp ma se scopri che chcp ti sta limitando nella risoluzione dei problemi, puoi provare chcpa.

Ma uno dei migliori strumenti qui nella risoluzione dei problemi sarebbe un editor esadecimale o xxd come menzionato. E cercando di semplificare ulteriormente la tua linea, come suggerito.

Passaggi del genere ti aiuteranno a isolare dove si trova l'errore. E commenta quando provi qualcosa qui o oltre.


-1

Eco non usa le virgolette. Prendi le doppie virgolette e funzionerà.

echo echo hello > test.bat

L'eco cerca la stringa dopo l'eco e lo spazio, le virgolette interrompono la stringa.

Altro su eco .


Ciò non ha risolto il problema. Inserito: funzionava echo echo Yowzer > test.bat come: .\test.bate otteneva ancora la stessa risposta di cui sopra. Nota che se modifico il file in Blocco note, restituisce comunque una risposta inutile. Tuttavia, se creo / salvo il file in Blocco note dall'inizio, tutto va bene. Qualcuno può duplicare questo?
user340089,

strano. ha funzionato per me.
Keltari,

Sei riuscito a replicare il problema che stavo riscontrando? Cioè, hai visto lo strano risultato riportato sopra quando hai usato le virgolette?
user340089,

sì. Ho rimosso le virgolette e ha funzionato come previsto
Keltari

-1 Ha detto "Sei riuscito a replicare il problema che stavo avendo" E il problema che stava avendo era quei personaggi divertenti. E hai risposto dicendo "sì ...". Ed è chiaro dalla sua domanda e ancora più chiaro dalla sua risposta, che ciò di cui parli di "le virgolette rompe la stringa", non è assolutamente e ovviamente il problema
barlop,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.